///|
/// Renders the parameters of one field as ` [NAME=value]` groups.
fn params_text(params : Array[@vcard.Param]) -> String {
let text = StringBuilder()
for param in params {
text.write_string(" [" + param.name)
for value in param.values {
text.write_string("=" + value)
}
text.write_string("]")
}
text.to_string()
}
///|
fn main {
let input = "BEGIN:VCARD\r\nVERSION:3.0\r\nFN;ENCODING=QUOTED-PRINTABLE:=E5=BC=A0=E4=B8=89\r\nN:Zhang;San;;;\r\nTEL;TYPE=cell;PREF=2:+8613900000002\r\nTEL;TYPE=home;PREF=1:+8613900000001\r\nEMAIL;TYPE=work:zhang@example.org\r\nEND:VCARD\r\nBEGIN:VCARD\r\nVERSION:4.0\r\nFN:Bob\r\nN:Doe;Bob;;;\r\nEND:VCARD\r\n"
let result = @vcard.parse(input)
println("Contacts: " + result.contacts.length().to_string())
println("Diagnostics: " + result.diagnostics.length().to_string())
for contact in result.contacts {
println("Name: " + contact.full_name + " (v" + contact.version + ")")
for phone in @vcard.sort_by_preference(contact.phones) {
println(" TEL " + phone.value + params_text(phone.params))
}
for email in contact.emails {
println(" EMAIL " + email.value + params_text(email.params))
}
}
}