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 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}