23 lines
587 B
OCaml
23 lines
587 B
OCaml
|
|
type 'a state =
|
||
|
|
| Partial of 'a partial
|
||
|
|
| Done of int * 'a
|
||
|
|
| Fail of int * string list * string
|
||
|
|
|
||
|
|
and 'a partial =
|
||
|
|
{ committed : int
|
||
|
|
; continue : Bigstringaf.t -> off:int -> len:int -> More.t -> 'a state }
|
||
|
|
|
||
|
|
|
||
|
|
let state_to_option x = match x with
|
||
|
|
| Done(_, v) -> Some v
|
||
|
|
| Fail _ -> None
|
||
|
|
| Partial _ -> None
|
||
|
|
|
||
|
|
let fail_to_string marks err =
|
||
|
|
String.concat " > " marks ^ ": " ^ err
|
||
|
|
|
||
|
|
let state_to_result x = match x with
|
||
|
|
| Done(_, v) -> Ok v
|
||
|
|
| Partial _ -> Error "incomplete input"
|
||
|
|
| Fail(_, marks, err) -> Error (fail_to_string marks err)
|