///|
fn print_events(events : Array[@mpstream.MultipartEvent]) -> Unit {
for event in events {
match event {
PartBegin(meta) => println("begin \{meta.name}")
PartData(bytes) => println("data \{bytes.length()} bytes")
PartEnd(index) => println("end #\{index}")
MessageEnd => println("message complete")
}
}
}
///|
fn main raise {
let boundary = "basic-demo"
let writer = @mpstream.MultipartWriter::new(
boundary,
@mpstream.default_limits(),
)
let meta : @mpstream.PartMeta = {
index: 0,
name: "greeting",
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\x00moonbit"))
wire.write_bytes(writer.end_part())
wire.write_bytes(writer.finish())
println("Content-Type: \{writer.content_type()}")
let parser = @mpstream.MultipartParser::new(
boundary,
@mpstream.default_limits(),
)
let bytes = wire.to_bytes()
for offset = 0; offset < bytes.length(); {
let end = Int::min(offset + 3, bytes.length())
print_events(parser.feed(bytes.view(start=offset, end~).to_owned()))
continue end
}
print_events(parser.finish())
}