konduto/types/hotel/
room_number.rs

1use crate::impl_nutype_error_conversion;
2use nutype::nutype;
3
4/// Número do quarto (máximo 100 caracteres)
5#[nutype(
6    sanitize(trim),
7    validate(not_empty, len_char_max = 100),
8    derive(Debug, Clone, PartialEq, Eq, Display, AsRef, Deref, Serialize, Deserialize)
9)]
10pub struct RoomNumber(String);
11
12impl RoomNumber {
13    pub fn as_str(&self) -> &str {
14        self.as_ref()
15    }
16}
17
18impl_nutype_error_conversion!(RoomNumberError);
19
20#[cfg(test)]
21mod tests {
22    use super::*;
23
24    #[test]
25    fn test_room_number_valid() {
26        let number = RoomNumber::try_new("1003").unwrap();
27        assert_eq!(number.as_str(), "1003");
28    }
29
30    #[test]
31    fn test_room_number_alphanumeric() {
32        let number = RoomNumber::try_new("A105").unwrap();
33        assert_eq!(number.as_str(), "A105");
34    }
35
36    #[test]
37    fn test_room_number_empty() {
38        let result = RoomNumber::try_new("");
39        assert!(result.is_err());
40    }
41
42    #[test]
43    fn test_room_number_too_long() {
44        let long = "a".repeat(101);
45        let result = RoomNumber::try_new(long);
46        assert!(result.is_err());
47    }
48}