use chrono::NaiveDateTime; use crate::validation::{self, *}; pub struct BCard { name: Option, nickname: Option, label: Option>, address: Option>, emails: Option>>, title: Option, role: Option, organization: Option, urls: Option>>, telephones: Option>>, revision: Option, } impl BCard { fn new() -> Self { Self { name: None, nickname: None, label: None, address: None, emails: None, title: None, role: None, organization: None, urls: None, telephones: None, revision: None, } } } impl Validation for BCard { fn validate(&self) -> Result<(), ValidationError> { let mut result = Ok(()); result = match &self.name { Some(n) => validation::add_results(result, n.validate()), None => Err( ValidationError{ messages: vec![String::from("Name cannot be empty")] } ), }; // TODO add some more validation result } } pub struct Name { prefix: Option, first_name: Option, middle_name: Option, family_name: Option, suffix: Option, } impl Validation for Name { fn validate(&self) -> std::result::Result<(), ValidationError> { todo!() } } pub enum WorkHomeType { Home, Work, } pub struct TypedProperty { p_type: Option, value: T, } pub struct Address { street: Option, city: Option, locality: Option, postal_code: Option, country: Option, }