gaato/http/multipart does not have a README file
pub(all) suberror MultipartError {
InvalidBoundary(String)
BoundaryCollision
InvalidHeaderValue(String)
StreamPart(String)
} derive(Debug)test {
let part = @multipart.Part::file(
"upload", "data.bin", "application/octet-stream", b"\x00\xFF",
)
assert_eq(part.filename, Some("data.bin"))
assert_eq(part.body, Bytes(b"\x00\xFF"))
}fn Part::file_stream(name : String, filename : String, content_type : String, stream : &BodyStream, length? : Int64) -> Parttest {
let part = @multipart.Part::json("metadata", { "ok": true })
assert_eq(part.content_type, Some("application/json"))
assert_eq(part.body, Bytes(b"{\"ok\":true}"))
}test {
assert_eq(@multipart.Part::text("message", "hello").body, Bytes(b"hello"))
}test {
let request = @http.Request::post("/upload").header("x-id", "42")
let result = @multipart.apply(
request,
[@multipart.Part::text("message", "hello")],
"example",
)
assert_eq(
result.headers.get("content-type"),
Some("multipart/form-data; boundary=example"),
)
assert_eq(request.headers.get("content-type"), None)
}test {
let (content_type, body) = @multipart.encode(
[@multipart.Part::text("message", "hello")],
"example",
)
assert_eq(content_type, "multipart/form-data; boundary=example")
assert_true(body.has_suffix(b"--example--\r\n"[:]))
}test {
let (_, body) = @multipart.encode_body(
[@multipart.Part::text("message", "hello")],
"B",
)
assert_eq(body.length(), Some(69L))
}fn encode_segments(parts : Array[Part], boundary : String) -> (String, Array[Bytes]) raise MultipartErrortest {
let file = b"\x00\x01"
let (_, segments) = @multipart.encode_segments(
[@multipart.Part::file("upload", "a.bin", "application/octet-stream", file)],
"example",
)
assert_eq(segments.length(), 3)
assert_true(physical_equal(segments[1], file))
}fn encode_segments_fresh(parts : Array[Part], random? : () -> Double, attempts? : Int) -> (String, Array[Bytes]) raise MultipartErrorfn make_boundary(random : () -> Double) -> Stringtest {
assert_eq(
@multipart.make_boundary(() => 0.0),
"mbt-sdk-00000000000000000000000000000000",
)
}Install
Download zipSans-IO HTTP vocabulary for MoonBit SDKs: request/response types, a Transport trait, Retry-After and Link parsing, a multipart writer, an incremental SSE parser, an RFC 6265 cookie jar and a scripted fake transport. No dependencies; runs on every backend.