acton_ern/model/
domain.rs

1use std::fmt;
2
3use derive_more::{AsRef, From, Into};
4
5use crate::errors::ErnError;
6
7#[derive(AsRef, From, Into, Eq, Debug, PartialEq, Clone, Hash, PartialOrd)]
8pub struct Domain(pub(crate) String);
9
10impl Domain {
11    pub fn as_str(&self) -> &str {
12        &self.0
13    }
14
15    pub fn into_owned(self) -> Domain {
16        Domain(self.0)
17    }
18    pub fn new(value: impl Into<String>) -> Result<Self, ErnError> {
19        let val = value.into();
20        if val.is_empty() {
21            Err(ErnError::ParseFailure("Domain", "cannot be empty".to_string()))
22        } else {
23            Ok(Domain(val))
24        }
25    }
26}
27
28impl Default for Domain {
29    fn default() -> Self {
30        Domain("acton".to_string())
31    }
32}
33
34impl fmt::Display for Domain {
35    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
36        write!(f, "{}", self.0)
37    }
38}
39
40impl std::str::FromStr for Domain {
41    type Err = ErnError;
42
43    fn from_str(s: &str) -> Result<Self, Self::Err> {
44        Domain::new(s.to_string())
45    }
46}
47
48// #[cfg(test)]
49// mod tests {
50//     use super::*;
51//
52//     #[test]
53//     fn test_domain_creation() {
54//         let domain = Domain::new("test").unwrap();
55//         assert_eq!(domain.as_str(), "test");
56//     }
57//
58//     #[test]
59//     fn test_domain_default() {
60//         let domain = Domain::default();
61//         assert_eq!(domain.as_str(), "acton");
62//     }
63//
64//     #[test]
65//     fn test_domain_display() {
66//         let domain = Domain::new("example");
67//         assert_eq!(format!("{}", domain.unwrap()), "example");
68//     }
69//
70//     #[test]
71//     fn test_domain_from_str() {
72//         let domain: Domain = "test".parse().unwrap();
73//         assert_eq!(domain.as_str(), "test");
74//     }
75//
76//     #[test]
77//     fn test_domain_equality() -> anyhow::Result<()> {
78//         let domain1 = Domain::new("test")?;
79//         let domain2 = Domain::new("test")?;
80//         let domain3 = Domain::new("other")?;
81//         assert_eq!(domain1, domain2);
82//         assert_ne!(domain1, domain3);
83//         Ok(())
84//     }
85//
86//     #[test]
87//     fn test_domain_into_string() {
88//         let domain = Domain::new("test").unwrap();
89//         let string: String = domain.into();
90//         assert_eq!(string, "test");
91//     }
92// }