Streaming multipart/form-data parser and writer for MoonBit.
moon add longhuanlin/multipart-stream@0.1.1import {
"longhuanlin/multipart-stream" @multipart,
}moon run src/examples/basic --target nativeContent-Type: multipart/form-data; boundary=basic-demo
begin greeting
data 13 bytes
end #0
message completemoon run src/cmd/mpstream --target native -- \
generate --boundary demo --field title=hello \
--file blob=@test/interop/curl_fixture.txtmpstream validate-boundary <value>
mpstream generate --boundary <value> [--field name=value] [--file name=@path] ...
mpstream inspect --content-type <value> (--hex <wire-hex> | --file <path>) [--chunk-size N]
mpstream versionlet writer = MultipartWriter::new("demo", default_limits())
let meta : PartMeta = {
index: 0,
name: "title",
filename: None,
content_type: Some("text/plain; charset=utf-8"),
headers: [],
}
let wire = @buffer.Buffer()
wire.write_bytes(writer.begin_part(meta))
wire.write_bytes(writer.write(b"hello"))
wire.write_bytes(writer.end_part())
wire.write_bytes(writer.finish())
let parser = MultipartParser::new("demo", default_limits())
let events = parser.feed(wire.to_bytes())
let completed = parser.finish() // [MessageEnd]moon fmt --check
moon check --target all --warn-list +73 --deny-warn
moon test --target all --warn-list -68-1+73
moon build src/cmd/mpstream --target native --warn-list +73 --deny-warn
moon info --target all
bash test/cli_smoke.sh
bash test/interop/run.sh --required
bash bench/run.shfn crc32_finish(state : Int64) -> Int64fn crc32_update(state : Int64, bytes : Bytes) -> Int64fn expand_mixed(content_type : String, body : Bytes, inherited_name : String, limits? : MixedLimits) -> Array[MixedPart] raise MixedErrorfn parse_from_source(source : ChunkSourceAdapter, parser : MultipartParser) -> Array[MultipartEvent] raise FormErrorfn plan(boundary : String, parts : Array[PlannedPart], limits : Limits) -> MultipartPlan raise MultipartErrorInstall
Download zipStreaming multipart/form-data parser and writer for MoonBit.