Crdt.Model_codec_sidecar
crdt · API reference
Sidecar document codec (view + metadata separation)
Sidecar document codec.
The sidecar format separates the JSON view from CRDT metadata:
- View: Plain JSON/CBOR that any system can read
- Metadata: CRDT info stored separately (node IDs, timestamps, etc.) This is useful for:
- Compatibility with non-CRDT systems (they just read the view)
- Debugging (human-readable JSON view)
- Storage optimization (view can be cached/indexed separately) Format:
- view: Plain JSON value (recursive structure)
- meta: Object containing:
- clock: Array of
sid, timepairs - paths: Object mapping JSON Pointer paths to node metadata
- Each path entry:
{ id: [sid, time], type: "str" | "obj" | "arr" | ... }
module J = Simdjsont.Jsonval escape_component : string -> stringtype node_meta = {
node_id : Clock.timestamp;
node_type : string;
chunks : chunk_meta list option;
}and chunk_meta = {
chunk_id : Clock.timestamp;
chunk_span : int;
chunk_deleted : bool;
}type sidecar = {
view : Value.t;
clock : Clock.clock_vector;
paths : (string * node_meta) list;
}val encode_timestamp : Clock.timestamp -> J.tval encode_clock_vector : Clock.clock_vector -> J.tval encode_chunk_meta : chunk_meta -> J.tval encode_node_meta : node_meta -> J.tval collect_meta : Model.t -> Node.t -> string -> (string * node_meta) listval encode : Model.t -> sidecarval to_json : sidecar -> J.tval encode_string : ?minify:bool -> Model.t -> stringval encode_bigstring :
?minify:bool ->
Model.t ->
(char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t * intval decode_timestamp : J.t -> Clock.timestamp optionval decode_clock_vector : J.t -> Clock.clock_vector optionval get_member : string -> (string * J.t) list -> J.t optionval decode_chunk_meta : J.t -> chunk_meta optionval decode_node_meta : J.t -> node_meta optionval decode_paths : J.t -> (string * node_meta) listval from_json : J.t -> sidecar optionval decode : sidecar -> Model.tval decode_string : string -> Model.t optionval decode_bigstring :
(char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t ->
len:int ->
Model.t optionval view_only : Model.t -> Value.tval view_only_string : ?minify:bool -> Model.t -> stringval view_only_bigstring :
?minify:bool ->
Model.t ->
(char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t * int