///|
fn main {
  let request = match
    @moonformdata.build_upload_request(
      [("title", "MoonFormData"), ("tag", "moonbit")],
      [@moonformdata.text_file_spec("upload", "../hello.txt", "hello")],
      boundary="example",
    ) {
    Ok(value) => value
    Err(err) => {
      println("encode failed: " + err.message())
      return
    }
  }

  println(request.content_type)
  match @moonformdata.roundtrip_request(request) {
    Ok(form) => {
      println(form.summary().to_line())
      println("title=" + form.require_field("title").unwrap())
      println(
        "filename=" + form.require_file("upload").unwrap().filename_or(""),
      )
      let schema = @moonformdata.default_form_schema()
        .add_field_rule(@moonformdata.required_field_rule("title"))
        .add_file_rule(
          @moonformdata.required_file_rule("upload")
          .allow_content_type("text/plain")
          .allow_extension("txt"),
        )
      println("schema=" + form.validate_schema(schema).summary())
      println("analysis=" + @moonformdata.analyze_form(form).compact_line())
      let contract = @moonformdata.upload_contract(schema).with_max_risk(
        @moonformdata.LowRisk,
      )
      match @moonformdata.inspect_upload_request(request, contract) {
        Ok(inspection) => println("contract=" + inspection.decision_line())
        Err(err) => println("contract failed: " + err.message())
      }
    }
    Err(err) => println("parse failed: " + err.message())
  }
}