A streaming multipart reader/writer library integrated with `moonbitlang/async`.
Dependencies
///|
async fn upload(client : @http.Client, file : &@io.Reader) -> @http.Response {
let form = @multipart.FormWriter(client)
client.request(Post, "/upload", extra_headers={
"Content-Type": form.content_type(),
})
form.write_field("description", "Release archive")
form.write_file("archive", filename="release.zip", file)
form.finish()
client.end_request()
}///|
async fn receive_archive(
source : &@io.Reader,
target : &@io.Writer,
content_type : String,
) -> Unit {
let (media_type, parameters) = @multipart.parse_header_value(content_type)
guard @http.CaseInsensitiveString(media_type) == "multipart/form-data" else {
raise Failure("expected multipart/form-data")
}
guard parameters.get("boundary") is Some(boundary) else {
raise Failure("missing multipart boundary")
}
let form = @multipart.Form(source, boundary~)
while form.next_part() is Some(part) {
if part.name() == "archive" {
target.write_reader(part)
}
}
}///|
async fn copy_parts(source : &@io.Reader, target : &@io.Writer) -> Unit {
let reader = @multipart.Reader(source, boundary="incoming")
let writer = @multipart.Writer(target, boundary="outgoing")
while reader.next_part() is Some((headers, body)) {
writer.write_reader(headers~, body)
}
writer.finish()
}type Formtype FormPartasync fn _direct_read(self : FormPart, buffer : FixedArray[Byte], offset~ : Int, max_len~ : Int) -> Inttype FormWriterasync fn FormWriter::write_file(self : FormWriter, name : String, filename? : String, content_type? : String, file : &Reader) -> Unitasync fn FormWriter::write_part(self : FormWriter, headers~ : Map[CaseInsensitiveString, String], callback : async (&Writer) -> Unit) -> Unittype Readertype Writerasync fn Writer::write_part(self : Writer, headers~ : Map[CaseInsensitiveString, String], callback : async (&Writer) -> Unit) -> Unitfn parse_header_value(value : String) -> (String, Map[CaseInsensitiveString, String]) raise MultipartErrorInstall
Download zipA streaming multipart reader/writer library integrated with `moonbitlang/async`.
Dependencies