///|
/// moon-multipart local roundtrip demo.
/// Generate a multipart body → parse it back → print results.
/// Run: `moon run cmd/main`
fn main {
  let w = @lib.MultipartWriter::with_boundary("DemoBoundary")
  w.add_field("title", "Hello moon-multipart")
  w.add_field("tags", "moonbit multipart rfc7578")
  w.add_file(
    "readme",
    "README.md",
    Some("text/markdown"),
    b"# moon-multipart\nA streaming multipart parser for MoonBit.",
  )
  let (boundary, body) = w.finish()

  match @lib.parse_all(body, boundary, @lib.ParseOptions::default()) {
    Ok(form) => {
      println(
        "Generated " +
        body.length().to_string() +
        " bytes, parsed " +
        form.len().to_string() +
        " parts",
      )
      for i = 0; i < form.parts.length(); i = i + 1 {
        match form.parts[i] {
          @lib.Field(name, value) =>
            println("  field \"" + name + "\" = \"" + value + "\"")
          @lib.File(name, filename, ct, data) => {
            let ct_str = match ct {
              Some(c) => c
              None => "(none)"
            }
            println(
              "  file \"" +
              name +
              "\" filename=\"" +
              filename +
              "\" type=" +
              ct_str +
              " size=" +
              data.length().to_string(),
            )
          }
        }
      }
    }
    Err(e) => println("Parse error: " + e.to_string())
  }
}