scim_server/resource/value_objects/
mod.rs1mod address;
29mod composite_validation;
30mod email_address;
31mod extension;
32mod external_id;
33mod factory;
34mod group_member;
35mod meta;
36mod multi_valued;
37mod name;
38mod phone_number;
39mod resource_id;
40mod schema_uri;
41mod user_name;
42mod value_object_trait;
43
44pub use address::Address;
45pub use composite_validation::{
46 CompositeValidatorChain, EmailConsistencyValidator, IdentityConsistencyValidator,
47 NameConsistencyValidator, UniquePrimaryValidator, UserNameUniquenessValidator,
48};
49pub use email_address::EmailAddress;
50pub use extension::{ExtensionAttributeValue, ExtensionCollection};
51pub use external_id::ExternalId;
52pub use factory::{GenericMultiValuedAttribute, ValueObjectFactory};
53pub use group_member::{
54 GroupMember, GroupMembers, MultiValuedAddresses, MultiValuedEmails, MultiValuedPhoneNumbers,
55};
56pub use meta::Meta;
57pub use multi_valued::MultiValuedAttribute;
58pub use name::Name;
59pub use phone_number::PhoneNumber;
60pub use resource_id::ResourceId;
61pub use schema_uri::SchemaUri;
62pub use user_name::UserName;
63pub use value_object_trait::{
64 CompositeValidator, ExtensionAttribute, SchemaConstructible, ValueObject,
65 ValueObjectConstructor, ValueObjectRegistry,
66};
67
68#[cfg(test)]
69mod tests {
70 use super::*;
71
72 #[test]
73 fn test_value_objects_are_immutable() {
74 let id = ResourceId::new("test-id".to_string()).unwrap();
76 let id_str = id.as_str();
77
78 let new_id = ResourceId::new("different-id".to_string()).unwrap();
80 assert_ne!(id_str, new_id.as_str());
81 }
82
83 #[test]
84 fn test_value_objects_enforce_invariants() {
85 assert!(ResourceId::new("".to_string()).is_err());
87
88 assert!(ResourceId::new("valid-id".to_string()).is_ok());
90 }
91}