`Irmin.CONTENT_ADDRESSABLE_STORE_MAKER`

`CONTENT_ADDRESSABLE_STOREMAKER`

is the signature exposed by content-addressable store backends. `K`

is the implementation of keys and `V`

is the implementation of values.

`include CONTENT_ADDRESSABLE_STORE with type key = K.t and type value = V.t`

The type for content-addressable backend stores. The `'a`

phantom type carries information about the store mutability.

`type key = K.t`

The type for keys.

`val mem : [> Perms.read ] t -> key -> bool Lwt.t`

`mem t k`

is true iff `k`

is present in `t`

.

`val find : [> Perms.read ] t -> key -> value option Lwt.t`

`find t k`

is `Some v`

if `k`

is associated to `v`

in `t`

and `None`

is `k`

is not present in `t`

.

`val add : [> Perms.write ] t -> value -> key Lwt.t`

Write the contents of a value to the store. It's the responsibility of the content-addressable store to generate a consistent key.

`val unsafe_add : [> Perms.write ] t -> key -> value -> unit Lwt.t`

Same as `add`

but allows to specify the key directly. The backend might choose to discared that key and/or can be corrupt if the key scheme is not consistent.

`val clear : 'a t -> unit Lwt.t`

Clear the store. This operation is expected to be slow.

`val batch : Perms.read t -> ([ Perms.read | Perms.write ] t -> 'a Lwt.t) -> 'a Lwt.t`

`batch t f`

applies the writes in `f`

in a separate batch. The exact guarantees depend on the implementation.

`val v : Private.Sigs.config -> Perms.read t Lwt.t`

`v config`

is a function returning fresh store handles, with the configuration `config`

, which is provided by the backend.