use vcard::{
prop::{adr::ADR, categories::CATEGORIES, n::N},
tree::{
cst::VcardCst,
param::{label::LABEL, r#type::TYPE},
},
};
fn main() {
let input = concat!(
"BEGIN:VCARD\r\n",
"VERSION:4.0\r\n",
"FN:John Doe\r\n",
"N:Doe;John;Quinlan;Dr.;Jr.\r\n",
"ADR;TYPE=work;LABEL=\"Acme HQ^nSpringfield\":;;123 Main St;Springfield;IL;62704;USA\r\n",
"CATEGORIES:friend,work\r\n",
"END:VCARD\r\n",
);
let mut card = VcardCst::parse(input).unwrap();
let name = card.prop::<N>().unwrap();
println!("family: {:?}", name.family);
println!("given: {:?}", name.given);
println!("prefix: {:?}", name.prefixes);
let address = card.prop::<ADR>().unwrap();
println!("street: {:?}", address.street);
println!("city: {:?}", address.locality);
let mut address = card.prop_mut::<ADR>().unwrap();
println!("type: {:?}", address.param::<TYPE>());
println!("label: {:?}", address.param::<LABEL>());
address.set_street(&["456 Oak Ave"]);
address.set_postal_code(&["62705"]);
let mut categories = card.prop_mut::<CATEGORIES>().unwrap();
let mut items = categories.list_mut();
items.remove(0);
items.push("carddav");
print!("\n{card}");
}