Module Mavryk_scoru_wasm.Durable

type t

t allows a wrapped_tree to be manipulated as a tree of chunked_byte_vector

exception Invalid_key of string

key was too long, or contained invalid steps.

exception Index_too_large of int

Invalid index for a subkey

exception Value_not_found

A value was not found in the durable store.

exception Tree_not_found

A tree does not exists under key in the durable store.

exception Out_of_bounds of int64 * int64

Attempted to write/read to/from a value at offset, beyond the limit.

exception Durable_empty

Durable_storage.t was empty.

exception Readonly_value

Cannot modify a readonly value.

exception IO_too_large

Cannot read from or write to more than 2,048 bytes

val encoding : t Mavryk_tree_encoding.t

encoding is a Mavryk_tree_encoding for t.

  • raises Durable_empty
type kind =
  1. | Value
  2. | Directory

Type describing the behavior of generic functions:

  • Value indicates the operation should work on the value only
  • Directory indicates the operation should work on the value and all subkeys under the given key.

See hash, for example.

type key

key is the type that indexes t. It enforces several constraints:

  • a key's length is bounded.
  • a key is a series of non-empty steps, where
  • a step is preceded by '/'
  • a step only contains alphanumeric ascii, or dots ('.')
val max_key_length : int

max_key_length is the maximum length of a key in bytes.

val key_of_string_exn : string -> key
  • raises Invalid_key
val key_of_string_opt : string -> key option
val exists : t -> key -> bool Lwt.t

exists tree key returns true iff there exists a value or a directory under key in tree, and false otherwise.

val find_value : t -> key -> Mavryk_lazy_containers.Chunked_byte_vector.t option Lwt.t

find_value durable key optionally looks for the value encoded at key in durable.

val find_value_exn : t -> key -> Mavryk_lazy_containers.Chunked_byte_vector.t Lwt.t
  • raises Value_not_found
val copy_tree_exn : t -> ?edit_readonly:bool -> key -> key -> t Lwt.t

copy_tree_exn tree ?edit_readonly from_key to_key produces a new tree in which a copy of the entire subtree at from_key is copied to to_key.

~edit_readonly:true allows a a tree to be copied into a readonly location.

  • raises Readonly_value
val move_tree_exn : t -> key -> key -> t Lwt.t

move_tree_exn tree from_key to_key produces a new tree in which the entire subtree at from_key is moved to to_key.

  • raises Readonly_value
val list : t -> key -> string list Lwt.t

list durable key returns the subkeys under key.

val count_subtrees : t -> key -> int Lwt.t

count_subtrees durable key returns the number of subtrees under key.

val subtree_name_at : t -> key -> int -> string Lwt.t

subtree_name_at durable key n returns the name of the n_th subtree under key.

val delete : ?edit_readonly:bool -> kind:kind -> t -> key -> t Lwt.t

delete ?edit_readonly ~kind durable key deletes the value of key if kind = `Value, and subtrees and/or values of key if kind = `All.

  • raises Readonly_value

    when edit_readonly is not set while trying to edit the readonly section.

val hash : kind:kind -> t -> key -> Mavryk_base.TzPervasives.Context_hash.t option Lwt.t

hash ~kind durable key retrieves the tree hash of the value (if kind = Value) or the complete directory (kind = Directory) at the given key. This is not the same as the hash of the value.

val hash_exn : kind:kind -> t -> key -> Mavryk_base.TzPervasives.Context_hash.t Lwt.t

hash_exn ~kind durable key retrieves the tree hash of the value (if kind = Value) or the complete directory (kind = Directory) at the given key. This is not the same as the hash of the value.

  • raises Value_not_found

    when key is not found and kind = Value

  • raises Tree_not_found

    when key is not found and kind = Directory.

val set_value_exn : t -> ?edit_readonly:bool -> key -> string -> t Lwt.t

set_value_exn durable key str installs the value str in durable under key, replacing any previous contents under this key without fetching it.

val create_value_exn : t -> ?edit_readonly:bool -> key -> int64 -> t option Lwt.t

create_value_exn ?edit_readonly durable key size allocates a new value of size at the given key. Returns Some durable if the value didn't exist, and None if there was already a value at the given key

  • raises Invalid_key

    if the key is invalid.

  • raises Readonly_value

    iff edit_readonly is not set to true when attempting to write in the readonly section.

val write_value_exn : t -> ?edit_readonly:bool -> key -> int64 -> string -> t Lwt.t

write_value_exn ?edit_readonly durable key offset bytes writes bytes to key, starting at the given offset.

If no value at key exists, it is created.

~edit_readonly:true allows a value to be written into a readonly location.

  • raises Out_of_bounds
  • raises Readonly_value

    iff edit_readonly is not set to true when attempting to write in the readonly section.

val read_value_exn : t -> key -> int64 -> int64 -> string Lwt.t

read_value durable key offset max_bytes reads up to max_bytes bytes from the value at key, starting at the given offset.

  • raises Value_not_found

    when key is not found.

  • raises Out_of_bounds

    when offset is larger than the value.

module Internal_for_tests : sig ... end