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