///|
/// Parses a Dictionary field value (RFC 9651 ยง3.2), including implicit
/// Boolean true members and inner-list members.
///
/// Run: `moon run examples/parse_dictionary`
fn main {
  let input = "en=\"Applepie\", da=:w4ZibGV0w6ZydGU=:, b, c; foo=bar"
  match @lib.parse_dictionary(input) {
    Err(e) => println("parse failed: \{e.to_string()}")
    Ok(dict) => {
      println("parsed dictionary from: \{input}")
      println("  member count: \{dict.len()}")
      for key in dict.keys() {
        match dict.get_by_key(key) {
          None => ()
          Some(m) =>
            match m {
              @lib.ItemMember(item) => {
                let bare = match item.bare {
                  @lib.StringItem(s) => "String(\{s})"
                  @lib.Boolean(v) => "Boolean(\{v})"
                  other => @debug.to_string(other)
                }
                println(
                  "  \{key} = \{bare} (\{item.parameters.len()} param(s))",
                )
              }
              @lib.InnerListMember(il) =>
                println("  \{key} = inner list (\{il.len()} item(s))")
            }
        }
      }
      match @lib.serialize_dictionary(dict) {
        Err(e) => println("serialize failed: \{e.to_string()}")
        Ok(sf) => println("canonical wire: \{sf.to_string()}")
      }
    }
  }
}