Unpack_buffer
A buffer for incremental decoding of an input stream.
An Unpack_buffer.t
is a buffer to which one can feed
strings, and then unpack
from the buffer to produce a queue of values.
module Unpack_one : sig ... end
If unpack_one : ('a, 'state) unpack
, then unpack_one ~state ~buf ~pos ~len
must unpack at most one value of type 'a
from buf
starting at pos
, and not using more than len
characters. unpack_one
must return one the following:
val sexp_of_t : ('a -> Ppx_sexp_conv_lib.Sexp.t) -> 'a t -> Ppx_sexp_conv_lib.Sexp.t
include Core_kernel.Invariant.S1 with type 'a t := 'a t
val invariant : ('a -> unit) -> 'a t -> unit
val create : 'a Unpack_one.t -> 'a t
val create_bin_prot : 'a Core_kernel.Bin_prot.Type_class.reader -> 'a t
create_bin_prot reader
returns an unpack buffer that unpacks the "size-prefixed" bin_prot encoding, in which a value is encoded by first writing the length of the bin_prot data as a 64-bit int, and then writing the bin_prot data itself.
val is_empty : _ t -> bool Core_kernel.Or_error.t
is_empty
returns true
if all the data fed into t
has been unpacked into values; false
if t
has unconsumed bytes or partially unpacked data. is_empty
returns an error if t
has encountered an unpacking error.
val feed : ?pos:int -> ?len:int -> _ t -> Core_kernel.Bigstring.t -> unit Core_kernel.Or_error.t
feed t buf ?pos ?len
adds the specified substring of buf
to t
's buffer. It returns an error if t
has encountered an unpacking error.
val feed_string : ?pos:int -> ?len:int -> _ t -> string -> unit Core_kernel.Or_error.t
val feed_bytes : ?pos:int -> ?len:int -> _ t -> Core_kernel.Bytes.t -> unit Core_kernel.Or_error.t
val unpack_into : 'a t -> 'a Core_kernel.Queue.t -> unit Core_kernel.Or_error.t
unpack_into t q
unpacks all the values that it can from t
and enqueues them in q
. If there is an unpacking error, unpack_into
returns an error, and subsequent feed
and unpack operations on t
will return that same error -- i.e. no more data can be fed to or unpacked from t
.
val unpack_iter : 'a t -> f:('a -> unit) -> unit Core_kernel.Or_error.t
unpack_iter t ~f
unpacks all the values that it can from t
, calling f
on each value as it's unpacked. If there is an unpacking error (including if f
raises), unpack_iter
returns an error, and subsequent feed
and unpack operations on t
will return that same error -- i.e., no more data can be fed to or unpacked from t
.
Behavior is unspecified if f
operates on t
.
val debug : bool Caml.ref
debug
controls whether invariants are checked at each call. Setting this to true
can make things very slow.