package git

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

Interface which describes the implementation of the decoder of an IDX file.

module Hash : sig ... end

The Hash module used to make the implementation.

type error =
  1. | Invalid_byte of int
    (*

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

    *)
  2. | Invalid_version of Int32.t
    (*

    Appear when the version of the IDX file is wrong.

    *)
  3. | Invalid_index_of_bigoffset of int
    (*

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

    *)
  4. | Expected_bigoffset_table
    (*

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

    *)
  5. | 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.