use std::borrow::Cow;
use vcard::{
param::VcardParam,
tree::{
cst::VcardCst,
prop::{email::EMAIL, r#fn::FN},
vcard::builder::VcardPropBuilder,
},
value::VcardValue,
vcard::Vcard,
version::VcardVersion,
};
fn main() {
let version = VcardVersion::V4_0;
let full_name = VcardPropBuilder::<FN>::new(version)
.build(VcardValue::Text("John Doe".into()))
.expect("FN accepts a text value");
let email = VcardPropBuilder::<EMAIL>::new(version)
.param(VcardParam::Pref(Cow::Borrowed("1")))
.build(VcardValue::Text("john@example.com".into()))
.expect("EMAIL accepts a text value with a PREF parameter");
let card = Vcard {
version,
properties: vec![full_name, email],
};
let valid = card.validate().expect("a conformant 4.0 card");
print!("{}", VcardCst::from(valid));
}