mod address;
mod composite_validation;
mod email_address;
mod extension;
mod external_id;
mod factory;
mod group_member;
mod meta;
mod multi_valued;
mod name;
mod phone_number;
mod resource_id;
mod schema_uri;
mod user_name;
mod value_object_trait;
pub use address::Address;
pub use composite_validation::{
CompositeValidatorChain, EmailConsistencyValidator, IdentityConsistencyValidator,
NameConsistencyValidator, UniquePrimaryValidator, UserNameUniquenessValidator,
};
pub use email_address::EmailAddress;
pub use extension::{ExtensionAttributeValue, ExtensionCollection};
pub use external_id::ExternalId;
pub use factory::{GenericMultiValuedAttribute, ValueObjectFactory};
pub use group_member::{
GroupMember, GroupMembers, MultiValuedAddresses, MultiValuedEmails, MultiValuedPhoneNumbers,
};
pub use meta::Meta;
pub use multi_valued::MultiValuedAttribute;
pub use name::Name;
pub use phone_number::PhoneNumber;
pub use resource_id::ResourceId;
pub use schema_uri::SchemaUri;
pub use user_name::UserName;
pub use value_object_trait::{
CompositeValidator, ExtensionAttribute, SchemaConstructible, ValueObject,
ValueObjectConstructor, ValueObjectRegistry,
};
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_value_objects_are_immutable() {
let id = ResourceId::new("test-id".to_string()).unwrap();
let id_str = id.as_str();
let new_id = ResourceId::new("different-id".to_string()).unwrap();
assert_ne!(id_str, new_id.as_str());
}
#[test]
fn test_value_objects_enforce_invariants() {
assert!(ResourceId::new("".to_string()).is_err());
assert!(ResourceId::new("valid-id".to_string()).is_ok());
}
}