module Unpack_one:sig..end
unpack_one : ('value, 'partial_unpack) unpack_one, then unpack_one buf ?pos
      ?len ?partial_unpack must unpack at most one value of type 'value from buf
      starting at pos, and not using more than len characters.  unpack_one must
      returns one the following:
      `Ok (value, n) -- unpacking succeeded and consumed n bytes
      `Not_enough_data (p, n) -- unpacking encountered a valid proper prefix of a packed
      value, and consumed n bytes (0 <= n <= len).  p is a "partial unpack" that can
      be supplied to a future call to unpack_one to continue unpacking
      `Invalid_data -- unpacking encountered an invalidly packed value
      A naive unpack_one that only succeeds on a fully packed value could lead to
      quadratic behavior if a packed value's bytes are input using a linear number of
      calls to feed.
type('value, 'partial_unpack)t =?partial_unpack:'partial_unpack ->
?pos:int ->
?len:int ->
Bigstring.t ->
[ `Invalid_data of Error.t
| `Not_enough_data of 'partial_unpack * int
| `Ok of 'value * int ]
val map : ('a, 'partial_unpack) t ->
       f:('a -> 'b) -> ('b, 'partial_unpack) tval create_bin_prot : 'a Bin_prot.Type_class.reader -> ('a, unit) tcreate_bin_prot reader returns an unpacker that reads 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 data itself.  This encoding makes it
      trivial to know if enough data is available in the buffer, so there is no need to
      represent partially unpacked values, and hence 'partial_unpack = unit.