//// Top-level facade for the multipartkit library. //// //// Re-exports the public types and the most common functions from the //// submodules. Less frequently used helpers (header lookup, validation, //// boundary extraction, content-disposition parsing, ...) live on their //// dedicated submodules. import gleam/yielder.{type Yielder} import multipartkit/content_disposition import multipartkit/encoder import multipartkit/error import multipartkit/form import multipartkit/limit import multipartkit/parser import multipartkit/part import multipartkit/stream /// Re-export of `multipartkit/part.Part`. pub type Part = part.Part /// Re-export of `multipartkit/stream.StreamPart`. pub type StreamPart = stream.StreamPart /// Re-export of `multipartkit/form.Form`. pub type Form = form.Form /// Re-export of `multipartkit/limit.Limits`. pub type Limits = limit.Limits /// Re-export of `multipartkit/limit.LimitConfigError`. pub type LimitConfigError = limit.LimitConfigError /// Re-export of `multipartkit/error.MultipartError`. pub type MultipartError = error.MultipartError /// Re-export of `multipartkit/content_disposition.ContentDisposition`. pub type ContentDisposition = content_disposition.ContentDisposition /// Re-export of `multipartkit/parser.parse`. pub fn parse( body: BitArray, content_type: String, ) -> Result(List(Part), MultipartError) { parser.parse(body, content_type) } /// Re-export of `multipartkit/parser.parse_with_limits`. pub fn parse_with_limits( body: BitArray, content_type: String, limits: Limits, ) -> Result(List(Part), MultipartError) { parser.parse_with_limits(body, content_type, limits) } /// Re-export of `multipartkit/stream.parse_stream`. pub fn parse_stream( chunks: Yielder(BitArray), content_type: String, ) -> Result(Yielder(Result(StreamPart, MultipartError)), MultipartError) { stream.parse_stream(chunks, content_type) } /// Re-export of `multipartkit/stream.parse_stream_with_limits`. pub fn parse_stream_with_limits( chunks: Yielder(BitArray), content_type: String, limits: Limits, ) -> Result(Yielder(Result(StreamPart, MultipartError)), MultipartError) { stream.parse_stream_with_limits(chunks, content_type, limits) } /// Re-export of `multipartkit/encoder.encode`. /// /// Returns `Error(InvalidBoundary(value))` when `boundary` does not /// satisfy the RFC 2046 ยง5.1.1 grammar (empty, > 70 chars, contains /// CR / LF / NUL / other non-`bchars`, or trails a space). Use /// `let assert Ok(body) = multipartkit.encode(...)` if your boundary is /// hard-coded or generated by `encode_form`/`generate_boundary` (always /// valid). pub fn encode( boundary: String, parts: List(Part), ) -> Result(BitArray, MultipartError) { encoder.encode(boundary, parts) } /// Re-export of `multipartkit/encoder.encode_form`. pub fn encode_form(the_form: Form) -> #(String, BitArray) { encoder.encode_form(the_form) } /// Re-export of `multipartkit/encoder.encode_stream`. pub fn encode_stream( boundary: String, parts: Yielder(StreamPart), ) -> Yielder(Result(BitArray, MultipartError)) { encoder.encode_stream(boundary, parts) } /// Re-export of `multipartkit/limit.default_limits`. pub fn default_limits() -> Limits { limit.default_limits() } /// Re-export of `multipartkit/limit.new`. Construct a validated /// `Limits` value; non-positive fields surface as /// `LimitConfigError.NonPositiveLimit`. pub fn new_limits( max_body_bytes max_body_bytes: Int, max_part_bytes max_part_bytes: Int, max_parts max_parts: Int, max_header_bytes max_header_bytes: Int, ) -> Result(Limits, LimitConfigError) { limit.new( max_body_bytes: max_body_bytes, max_part_bytes: max_part_bytes, max_parts: max_parts, max_header_bytes: max_header_bytes, ) }