konduto/types/hotel/
room_code.rs1use crate::impl_nutype_error_conversion;
2use nutype::nutype;
3
4#[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 RoomCode(String);
11
12impl RoomCode {
13 pub fn as_str(&self) -> &str {
14 self.as_ref()
15 }
16}
17
18impl_nutype_error_conversion!(RoomCodeError);
19
20#[cfg(test)]
21mod tests {
22 use super::*;
23
24 #[test]
25 fn test_room_code_valid() {
26 let code = RoomCode::try_new("STD-001").unwrap();
27 assert_eq!(code.as_str(), "STD-001");
28 }
29
30 #[test]
31 fn test_room_code_empty() {
32 let result = RoomCode::try_new("");
33 assert!(result.is_err());
34 }
35
36 #[test]
37 fn test_room_code_too_long() {
38 let long = "a".repeat(101);
39 let result = RoomCode::try_new(long);
40 assert!(result.is_err());
41 }
42}