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