diff options
author | jelemux <jeremias.weber@protonmail.com> | 2020-10-19 22:46:45 +0200 |
---|---|---|
committer | jelemux <jeremias.weber@protonmail.com> | 2020-10-19 22:46:45 +0200 |
commit | 3a0a55362fd98c74bfb14df320bcacafd0c57835 (patch) | |
tree | ad7f91af95df638bfbc58c48c97f34340ae37a8c /excluded/model.rs | |
parent | 84c2dab4200c37c818d83c95f85445ee00d83bf6 (diff) | |
download | wasm-card-3a0a55362fd98c74bfb14df320bcacafd0c57835.tar.gz wasm-card-3a0a55362fd98c74bfb14df320bcacafd0c57835.tar.bz2 |
break things down into their most basic parts
Diffstat (limited to 'excluded/model.rs')
-rw-r--r-- | excluded/model.rs | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/excluded/model.rs b/excluded/model.rs new file mode 100644 index 0000000..39e4c96 --- /dev/null +++ b/excluded/model.rs @@ -0,0 +1,88 @@ +use chrono::NaiveDateTime; +use crate::validation::{self, *}; + +pub struct BCard { + pub name: Option<Name>, + pub nickname: Option<String>, + pub label: Option<TypedProperty<String>>, + pub address: Option<TypedProperty<Address>>, + pub emails: Option<Vec<TypedProperty<String>>>, + pub title: Option<String>, + pub role: Option<String>, + pub organization: Option<String>, + pub urls: Option<Vec<TypedProperty<String>>>, + pub telephones: Option<Vec<TypedProperty<String>>>, + pub revision: Option<NaiveDateTime>, +} + +impl BCard { + pub 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 { + pub prefix: Option<String>, + pub first_name: Option<String>, + pub middle_name: Option<String>, + pub family_name: Option<String>, + pub suffix: Option<String>, +} + +impl Name { + pub fn new() -> Self { + Self { + prefix: None, + first_name: None, + middle_name: None, + family_name: None, + suffix: None, + } + } +} + +impl Validation for Name { + fn validate(&self) -> std::result::Result<(), ValidationError> { todo!() } +} + +pub enum WorkHomeType { + Home, + Work, +} + +pub struct TypedProperty<T> { + pub p_type: Option<WorkHomeType>, + pub value: T, +} + +pub struct Address { + pub street: Option<String>, + pub city: Option<String>, + pub locality: Option<String>, + pub postal_code: Option<String>, + pub country: Option<String>, +}
\ No newline at end of file |