konduto/types/address/
address_line.rs1use crate::impl_nutype_error_conversion;
2use nutype::nutype;
3
4#[nutype(
18 sanitize(trim),
19 validate(not_empty, len_char_max = 255),
20 derive(
21 Debug,
22 Clone,
23 PartialEq,
24 Eq,
25 Display,
26 AsRef,
27 Deref,
28 Serialize,
29 Deserialize,
30 )
31)]
32pub struct AddressLine(String);
33
34impl AddressLine {
35 pub fn as_str(&self) -> &str {
37 self.as_ref()
38 }
39}
40
41impl_nutype_error_conversion!(AddressLineError);
42
43#[cfg(test)]
44mod tests {
45 use super::*;
46
47 #[test]
48 fn test_valid_address() {
49 let addr = AddressLine::try_new("123 Main Street, Apt 4B").unwrap();
50 assert_eq!(addr.as_str(), "123 Main Street, Apt 4B");
51 }
52
53 #[test]
54 fn test_address_with_whitespace() {
55 let addr = AddressLine::try_new(" 456 Oak Ave ").unwrap();
56 assert_eq!(addr.as_str(), "456 Oak Ave");
57 }
58
59 #[test]
60 fn test_empty_address() {
61 let result = AddressLine::try_new("");
62 assert!(result.is_err());
63 }
64
65 #[test]
66 fn test_address_too_long() {
67 let long_addr = "a".repeat(256);
68 let result = AddressLine::try_new(long_addr);
69 assert!(result.is_err());
70 }
71
72 #[test]
73 fn test_address_max_length() {
74 let addr = "a".repeat(255);
75 let result = AddressLine::try_new(addr);
76 assert!(result.is_ok());
77 }
78}