sig
  module Key_in_collection :
    sig
      type t = { key : string; collection : string option; }
      val create :
        ?collection:string -> string -> Trakeva.Key_in_collection.t
      val to_string : Trakeva.Key_in_collection.t -> string
    end
  module Action :
    sig
      type t =
          Set of Trakeva.Key_in_collection.t * string
        | Unset of Trakeva.Key_in_collection.t
        | Sequence of Trakeva.Action.t list
        | Check of Trakeva.Key_in_collection.t * string option
      val set :
        ?collection:string -> key:string -> string -> Trakeva.Action.t
      val seq : Trakeva.Action.t list -> Trakeva.Action.t
      val contains :
        ?collection:string -> key:string -> string -> Trakeva.Action.t
      val is_not_set : ?collection:string -> string -> Trakeva.Action.t
      val unset : ?collection:string -> string -> Trakeva.Action.t
      val to_string : Trakeva.Action.t -> string
    end
  module Error :
    sig
      type t =
          [ `Act of Trakeva.Action.t
          | `Close
          | `Get of Trakeva.Key_in_collection.t
          | `Get_all of string
          | `Iter of string
          | `Load of string ] * string
      val to_string : Trakeva.Error.t -> string
    end
  module type KEY_VALUE_STORE =
    sig
      type t
      val load :
        string ->
        (Trakeva.KEY_VALUE_STORE.t,
         [> `Database of [> `Load of string ] * string ])
        Pvem_lwt_unix.Deferred_result.t
      val close :
        Trakeva.KEY_VALUE_STORE.t ->
        (unit, [> `Database of [> `Close ] * string ])
        Pvem_lwt_unix.Deferred_result.t
      val get :
        ?collection:string ->
        Trakeva.KEY_VALUE_STORE.t ->
        key:string ->
        (string option,
         [> `Database of [> `Get of Trakeva.Key_in_collection.t ] * string ])
        Pvem_lwt_unix.Deferred_result.t
      val get_all :
        Trakeva.KEY_VALUE_STORE.t ->
        collection:string ->
        (string list, [> `Database of [> `Get_all of string ] * string ])
        Pvem_lwt_unix.Deferred_result.t
      val iterator :
        Trakeva.KEY_VALUE_STORE.t ->
        collection:string ->
        unit ->
        (string option, [> `Database of [> `Iter of string ] * string ])
        Pvem_lwt_unix.Deferred_result.t
      val act :
        Trakeva.KEY_VALUE_STORE.t ->
        action:Trakeva.Action.t ->
        ([ `Done | `Not_done ],
         [> `Database of [> `Act of Trakeva.Action.t ] * string ])
        Pvem_lwt_unix.Deferred_result.t
    end
end