///|
/// Opaque, single-owner multipart/form-data parser state.
declare pub type MultipartParser

///|
/// Create a parser for an already extracted boundary and explicit limits.
declare pub fn MultipartParser::new(
  boundary : String,
  limits : @model.Limits,
) -> MultipartParser raise @model.MultipartError

///|
/// Create a parser for legacy `multipart/mixed` child parts. Missing child
/// names inherit `parent_name`; normal form-data callers should use `new`.
declare pub fn MultipartParser::new_mixed(
  boundary : String,
  parent_name : String,
  limits : @model.Limits,
) -> MultipartParser raise @model.MultipartError

///|
/// Consume one arbitrary bytes chunk and return ordered owned events.
///
/// After this call raises, the parser becomes failed and cannot resume.
declare pub fn MultipartParser::feed(
  self : MultipartParser,
  chunk : Bytes,
) -> Array[@model.MultipartEvent] raise @model.MultipartError

///|
/// Signal end of input and require a complete closing delimiter.
declare pub fn MultipartParser::finish(
  self : MultipartParser,
) -> Array[@model.MultipartEvent] raise @model.MultipartError

///|
/// Inspect the public lifecycle phase without exposing implementation state.
declare pub fn MultipartParser::phase(
  self : MultipartParser,
) -> @model.ParserPhase

///|
/// Number of input bytes consumed before success or failure.
declare pub fn MultipartParser::bytes_seen(self : MultipartParser) -> Int64

///|
/// Return redacted parser counters accumulated so far.
declare pub fn MultipartParser::stats(
  self : MultipartParser,
) -> @model.ParserStats