Skip to main content

ntex_net/connect/
uri.rs

1use super::Address;
2
3impl Address for urly::Url {
4    fn host(&self) -> &str {
5        self.host().unwrap_or("")
6    }
7
8    fn port(&self) -> Option<u16> {
9        // Azure Service Bus uses amqps
10        self.port_or_known_default()
11            .or_else(|| (self.scheme_str() == Some("sb")).then_some(5671))
12    }
13}
14
15#[cfg(test)]
16mod tests {
17    use super::*;
18
19    #[test]
20    fn port_tests() {
21        for (s, p) in [
22            ("http", 80),
23            ("https", 443),
24            ("ws", 80),
25            ("wss", 443),
26            ("amqp", 5672),
27            ("amqps", 5671),
28            ("sb", 5671),
29            ("mqtt", 1883),
30            ("mqtts", 8883),
31            ("ftp", 21),
32        ] {
33            let url = urly::Url::try_from(format!("{s}://h/")).unwrap();
34            assert_eq!(Address::port(&url), Some(p), "{s}");
35        }
36        let url = urly::Url::from_static("unknowns://h/");
37        assert_eq!(Address::port(&url), None);
38    }
39
40    #[test]
41    fn url_address() {
42        let url = urly::Url::from_static("mqtts://[::1]/a");
43        assert_eq!(Address::host(&url), "[::1]");
44        assert_eq!(Address::port(&url), Some(8883));
45        let url = urly::Url::from_static("http://example.com:8080/");
46        assert_eq!(Address::host(&url), "example.com");
47        assert_eq!(Address::port(&url), Some(8080));
48        let url = urly::Url::from_static("/a");
49        assert_eq!(Address::host(&url), "");
50        assert_eq!(Address::port(&url), None);
51    }
52}