Module Angstrom_lwt_unix

val parse : ?⁠pushback:(unit -> unit Lwt.t) -> 'a Angstrom.t -> Lwt_io.input_channel -> (Angstrom.Buffered.unconsumed * ('a, string) Stdlib.result) Lwt.t
val parse_many : 'a Angstrom.t -> ('a -> unit Lwt.t) -> Lwt_io.input_channel -> (Angstrom.Buffered.unconsumed * (unit, string) Stdlib.result) Lwt.t
val with_buffered_parse_state : ?⁠pushback:(unit -> unit Lwt.t) -> 'a Angstrom.Buffered.state -> Lwt_io.input_channel -> (Angstrom.Buffered.unconsumed * ('a, string) Stdlib.result) Lwt.t

Useful for resuming a parse that returns unconsumed data. Construct a Buffered.state by using Buffered.parse and provide it into this function. This is essentially what parse_many does, so consider using that if you don't require fine-grained control over how many times you want the parser to succeed.

Usage example:

parse parser in_channel >>= fun (unconsumed, result) ->
match result with
| Ok a ->
  let { buf; off; len } = unconsumed in
  let state = Buffered.parse parser in
  let state = Buffered.feed state (`Bigstring (Bigstringaf.sub ~off ~len buf)) in
  with_buffered_parse_state state in_channel
| Error err -> failwith err