// Copyright 2026 Leo Cheng
// SPDX-License-Identifier: Apache-2.0
///|
fn body(text : String) -> Bytes {
let out : Array[Byte] = []
for i = 0; i < text.length(); i = i + 1 {
out.push((text.at(i).to_int() & 0xFF).to_byte())
}
Bytes::from_array(out)
}
///|
fn main raise {
// Parse a media type and read its parameters back.
let html = @moonmime.media_type("text/html; charset=utf-8")
println(html.essence)
println(html.param("charset").unwrap_or(""))
// A filename implies a type; a type implies the filename people actually use.
println(@moonmime.guess_type("tacos-al-pastor.png"))
println(@moonmime.guess_extension("audio/mpeg").unwrap_or(""))
// Name a download: plain ASCII stays quoted, a quote goes RFC 5987.
println(@moonmime.content_disposition("menu.pdf"))
println(@moonmime.content_disposition("receta \"de la abuela\".pdf"))
// Split a multipart body — the shape email and forms share.
let mail = body("--b\r\nContent-Type: text/plain\r\n\r\nhola\r\n--b--\r\n")
let parts = @moonmime.multipart(mail[:], "b")
println(parts[0].header("content-type").unwrap_or(""))
println(parts[0].body.length())
// The same bytes read as a form upload.
let upload = body(
"------edge\r\n" +
"Content-Disposition: form-data; name=\"recipe\"\r\n" +
"\r\n" +
"chiles en nogada\r\n" +
"------edge--\r\n",
)
let form = @moonmime.formdata(upload[:], "----edge")
println(form.field("recipe").unwrap_or(""))
}