Module Index_pack.Decoder

Parameters

module Hash : sig ... end

Signature

type error =
| Invalid_byte of int

Appear when we expect a specific byte and we catch another one.

| Invalid_version of Stdlib.Int32.t

Appear when the version of the IDX file is wrong.

| Invalid_index_of_bigoffset of int

Appear when we try to read a big offset value and we can't catch it.

| Expected_bigoffset_table

Appear when we don't have a big offset table but expect one.

| Invalid_hash of Hash.t * Hash.t

Appear when the hash produced when we un-serialize the IDX file does not correspond with the hash provided.

The error type.

val pp_error : error Fmt.t

Pretty-printer of error.

type t

The decoder state.

val pp : t Fmt.t

Pretty-printer of the decoder t.

val make : unit -> t

Make a new decoder state t.

val refill : int -> int -> t -> t

refill off len t provides a new t with len bytes to read, starting at off. This byte range is read by calls to eval with t until `Await is returned.

val eval : Cstruct.t -> t -> [ `Await of t | `End of t * Hash.t | `Hash of t * (Hash.t * Checkseum.Crc32.t * int64) | `Error of t * error ]

eval src t is:

  • `Await t iff t needs more input storage. The client must use refill to provide a new buffer and then call eval with `Await until other value returned.
  • `End (t, hash) when t is done. We returns the hash of the IDX file.
  • `Hash (t, (hash, crc, offset)) when t can returns a new value (hash, crc, offset). The client can call eval to continue the process. The value will be consumed then.
  • `Error (t, exn) iff the decoder meet an error exn. The decoder can't continue and sticks in this situation.