///|
pub fn parse_address_list(value : String) -> Array[Address] {
  let chunks = split_char(value, ',')
  let out : Array[Address] = []
  for chunk in chunks {
    let item = parse_address(trim_ascii(chunk))
    if item.mailbox != "" {
      out.push(item)
    }
  }
  out
}

///|
pub fn parse_address(value : String) -> Address {
  let lt = index_of(value, '<')
  if lt >= 0 {
    let before = trim_ascii(slice(value, 0, lt))
    let rest = slice(value, lt + 1, value.length())
    let gt = index_of(rest, '>')
    let mailbox = if gt >= 0 { slice(rest, 0, gt) } else { rest }
    address(normalize_display_name(before), trim_ascii(mailbox))
  } else {
    address("", trim_ascii(value))
  }
}

///|
pub fn format_address(addr : Address) -> String {
  if addr.display == "" {
    addr.mailbox
  } else {
    addr.display + " <" + addr.mailbox + ">"
  }
}