Opaque.String
include Ppx_compare_lib.Comparable.S with type t := t
val sexp_of_t : t -> Sexplib0.Sexp.t
include Binable.S with type t := t
include Binable.S_only_functions with type t := t
val bin_size_t : t Size.sizer
val bin_write_t : t Write.writer
val bin_read_t : t Read.reader
val __bin_read_t__ : (int -> t) Read.reader
This function only needs implementation if t
exposed to be a polymorphic variant. Despite what the type reads, this does *not* produce a function after reading; instead it takes the constructor tag (int) before reading and reads the rest of the variant t
afterwards.
val bin_shape_t : Shape.t
val bin_writer_t : t Type_class.writer
val bin_reader_t : t Type_class.reader
val bin_t : t Type_class.t
val length : t -> int
For performance's concern, we require caller of to_opaque
and of_opaque_exn
to pass in the buf
as the intermediate buffer for bin_prot conversion. These two functions will write bytes into the buffer, but will not resize the buffer. So the caller should prepare big enough buffer for their need.
For of_opaque_exn t
, the minimum buffer size should be length t
.
For to_opaque
the necessary buffer size can be computed using size
from Type_class.writer or you can catch the exception Bin_prot.Common.Buffer_short
(although the latter is not very reliable because some custom bin_io implementations raise a different exception).
Additional caveat: if the opaque blob is malformed/partial then of_opaque_exn
can read past the end of the blob, which can result in:
buf
rather than the contents of the blob)val to_opaque : buf:Common.buf -> 'a -> 'a Type_class.writer -> t
val of_opaque_exn : buf:Common.buf -> t -> 'a Type_class.reader -> 'a