konduto/types/address/
address_name.rs1use crate::impl_nutype_error_conversion;
2use nutype::nutype;
3
4#[nutype(
18 sanitize(trim),
19 validate(not_empty, len_char_max = 100),
20 derive(
21 Debug,
22 Clone,
23 PartialEq,
24 Eq,
25 Display,
26 AsRef,
27 Deref,
28 Serialize,
29 Deserialize,
30 )
31)]
32pub struct AddressName(String);
33
34impl AddressName {
35 pub fn as_str(&self) -> &str {
37 self.as_ref()
38 }
39}
40
41impl_nutype_error_conversion!(AddressNameError);
42
43#[cfg(test)]
44mod tests {
45 use super::*;
46
47 #[test]
48 fn test_valid_name() {
49 let name = AddressName::try_new("John Doe").unwrap();
50 assert_eq!(name.as_str(), "John Doe");
51 }
52
53 #[test]
54 fn test_name_with_whitespace() {
55 let name = AddressName::try_new(" John Doe ").unwrap();
56 assert_eq!(name.as_str(), "John Doe");
57 }
58
59 #[test]
60 fn test_empty_name() {
61 let result = AddressName::try_new("");
62 assert!(result.is_err());
63 }
64
65 #[test]
66 fn test_name_too_long() {
67 let long_name = "a".repeat(101);
68 let result = AddressName::try_new(long_name);
69 assert!(result.is_err());
70 }
71
72 #[test]
73 fn test_name_max_length() {
74 let name = "a".repeat(100);
75 let result = AddressName::try_new(name);
76 assert!(result.is_ok());
77 }
78
79 #[test]
80 fn test_serialization() {
81 let name = AddressName::try_new("Jane Doe").unwrap();
82 let json = serde_json::to_string(&name).unwrap();
83 assert_eq!(json, "\"Jane Doe\"");
84 }
85
86 #[test]
87 fn test_deserialization() {
88 let json = "\"John Smith\"";
89 let name: AddressName = serde_json::from_str(json).unwrap();
90 assert_eq!(name.as_str(), "John Smith");
91 }
92}