///|
fn main {
  let body = "--demo\r\n" +
    "Content-Disposition: form-data; name=\"title\"\r\n" +
    "\r\n" +
    "MoonFormData demo\r\n" +
    "--demo\r\n" +
    "Content-Disposition: form-data; name=\"upload\"; filename=\"..\\\\report.txt\"\r\n" +
    "Content-Type: text/plain\r\n" +
    "\r\n" +
    "hello from MoonBit\r\n" +
    "--demo--\r\n"
  match @moonformdata.parse_multipart(body, "demo") {
    Ok(form) => {
      println("parsed parts: " + form.parts.length().to_string())
      println("title: " + form.field_value("title").unwrap_or(""))
      let files = form.files("upload")
      if files.length() > 0 {
        println("file name: " + files[0].filename.unwrap_or(""))
        println("file body: " + files[0].body)
      }
    }
    Err(err) => println("parse error: " + err.message())
  }

  let encoded_parts = [
    @moonformdata.FormPart::{
      name: "message",
      filename: None,
      content_type: None,
      headers: [],
      body: "generated by MoonFormData",
    },
  ]
  match @moonformdata.encode_multipart(encoded_parts, boundary="generated") {
    Ok(encoded) => {
      println("encoded content-type: " + encoded.content_type)
      println("encoded bytes: " + encoded.body.length().to_string())
    }
    Err(err) => println("encode error: " + err.message())
  }

  match @moonformdata.parse_multipart("--oops--\r\n", "bad\r\nboundary") {
    Ok(_) => println("unexpected success")
    Err(err) => println("expected error: " + err.message())
  }
}