summaryrefslogtreecommitdiff
path: root/src/viewmodel/vcard.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/viewmodel/vcard.rs')
-rw-r--r--src/viewmodel/vcard.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/viewmodel/vcard.rs b/src/viewmodel/vcard.rs
new file mode 100644
index 0000000..2d415b7
--- /dev/null
+++ b/src/viewmodel/vcard.rs
@@ -0,0 +1,32 @@
+use yewtil::ptr::Irc;
+use crate::viewmodel::telephone::Telephone;
+use crate::viewmodel::address::Address;
+use crate::viewmodel::name::Name;
+
+#[derive(Clone, Debug)]
+pub struct VCardData {
+ pub names: Vec<Irc<Name>>,
+ pub addresses: Vec<Irc<Address>>,
+ pub telephones: Vec<Irc<Telephone>>,
+}
+
+macro_rules! make_vec_adder_fn {
+ ( $fnname:ident $property:ident $($arg_name:ident : $arg_type:ty),* ) => {
+ pub fn $fnname(&mut self, $( $arg_name : $arg_type ),*) {
+ $(self.$property.push($arg_name);)*
+ }
+ };
+}
+
+impl VCardData {
+ pub fn new() -> Self {
+ Self {
+ names: Vec::new(),
+ addresses: Vec::new(),
+ telephones: Vec::new(),
+ }
+ }
+ make_vec_adder_fn!( add_name names name: Irc<Name> );
+ make_vec_adder_fn!( add_address addresses address: Irc<Address> );
+ make_vec_adder_fn!( add_telephone telephones telephone: Irc<Telephone> );
+} \ No newline at end of file