pub fn parse_address_list<T>(address_list: &T) -> Result<AddressList>where
    T: AsRef<str>,
    T: ?Sized,
Expand description

Get an AddressList from a string

Tries its best to come up with the most reasonable parsed address list for a given (potentially spec-violating) input.

If there’s nothing to parse (i.e. an empty string), this function “fails” with Error::Empty, which is essentially equivalent to a None, but avoids nesting types.

Examples

Named malformed group:

let input = r#"Kikundi:  ,  "Jina"  (Maoni) <jina@example.org>, baruapepe@example.org;"#;

let result = parse_address_list(input).unwrap();

let manual: AddressList = Group::new("Kikundi").set_contacts(vec![
    Contact::new("jina@example.org").set_name("Jina").set_comment("Maoni"),
    Contact::new("baruapepe@example.org")
]).into();

assert!(result.deep_eq(&manual));

Multiple contacts, some of which may be malformed:

let input = r#"Przykład <przykład@example.org>, Példa, Rosszformázott <példa@example.org>"#;

let manual: AddressList = vec![
    Contact::new("przykład@example.org").set_name("Przykład"),
    Contact::new("példa@example.org").set_name("Példa, Rosszformázott"),
].into();

println!("{:?}", manual);

let result = parse_address_list(input).unwrap();

assert!(result.deep_eq(&manual));

Supplying an empty string:

match parse_address_list("") {
    Err(error::Error::Empty) => assert!(true),
    Ok(_) | Err(_) => assert!(false),
};