url_parse/core/
global.rs

1#[derive(Debug)]
2pub struct Domain<'a> {
3    pub subdomain: Option<&'a str>,
4    pub domain: Option<&'a str>,
5    pub top_level_domain: Option<&'a str>,
6}
7
8impl<'a> PartialEq for Domain<'a> {
9    /// Enables comparison between two domain objects.
10    fn eq(&self, other: &Self) -> bool {
11        self.subdomain == other.subdomain && self.domain == other.domain && self.top_level_domain == other.top_level_domain
12    }
13}
14
15impl<'a> Domain<'a> {
16    /// Create a new empty domain field with all fields set to none.
17    pub fn empty() -> Domain<'a> {
18        Domain {
19            subdomain: None,
20            domain: None,
21            top_level_domain: None,
22        }
23    }
24}
25
26#[cfg(test)]
27mod tests {
28    use super::*;
29
30    #[test]
31    fn test_domain_empty_when_typical() {
32        let expected = Domain {
33            subdomain: None,
34            domain: None,
35            top_level_domain: None,
36        };
37        let result = Domain::empty();
38
39        assert_eq!(result, expected);
40    }
41
42    #[test]
43    fn test_domain_equals_when_typical() {
44        let left = Domain{ subdomain: Some("one"), domain: Some("two"), top_level_domain: Some("three")};
45        let right = Domain{ subdomain: Some("one"), domain: Some("two"), top_level_domain: Some("three")};
46
47        assert_eq!(left, right);
48    }
49
50    #[test]
51    fn test_domain_not_equals_when_diff_subdomain() {
52        let left = Domain{ subdomain: Some("one"), domain: Some("two"), top_level_domain: Some("three")};
53        let right = Domain{ subdomain: Some("X"), domain: Some("two"), top_level_domain: Some("three")};
54
55        assert_ne!(left, right);
56    }
57
58    #[test]
59    fn test_domain_not_equals_when_diff_domain() {
60        let left = Domain{ subdomain: Some("one"), domain: Some("two"), top_level_domain: Some("three")};
61        let right = Domain{ subdomain: Some("one"), domain: Some("X"), top_level_domain: Some("three")};
62
63        assert_ne!(left, right);
64    }
65
66    #[test]
67    fn test_domain_not_equals_when_diff_top_level_domain() {
68        let left = Domain{ subdomain: Some("one"), domain: Some("two"), top_level_domain: Some("three")};
69        let right = Domain{ subdomain: Some("one"), domain: Some("two"), top_level_domain: Some("X")};
70
71        assert_ne!(left, right);
72    }
73}