Crdt.Rx

crdt · API reference

JSON-Rx reactive RPC protocol

JSON-Rx reactive RPC protocol.

This module implements the JSON Reactive RPC protocol for real-time CRDT synchronization.

JSON-Rx is a bidirectional RPC protocol supporting:

  • Request/Response for synchronous calls
  • Notifications for fire-and-forget messages
  • Subscriptions for streaming data see https://jsonjoy.com/specs/json-rx JSON-Rx specification

Message Types

type message = 
  | Request of {
    id : int;
    method_ : string;
    data : Value.t option;
  }
  | Response of {
    id : int;
    data : Value.t;
  }
  | Error of {
    id : int;
    error : Value.t;
  }
  | Notification of {
    method_ : string;
    data : Value.t option;
  }
  | Subscribe of {
    id : int;
    channel : string;
  }
  | Unsubscribe of {
    id : int;
  }
  | Data of {
    id : int;
    data : Value.t;
  }
  | Complete of {
    id : int;
  }

Message types for JSON-Rx protocol.

Each message has a specific purpose:

  • Request: Client sends request, expects response
  • Response: Server responds with data
  • Error: Server responds with error
  • Notification: Fire-and-forget message (no response expected)
  • Subscribe: Client subscribes to a channel
  • Unsubscribe: Client unsubscribes from a channel
  • Data: Server pushes data on a subscription
  • Complete: Server signals subscription is complete

Message Constructors

val request : id:int -> method_:string -> ?data:Value.t -> unit -> message

Create a request message

val response : id:int -> data:Value.t -> message

Create a response message

val error : id:int -> error:Value.t -> message

Create an error message

val notification : method_:string -> ?data:Value.t -> unit -> message

Create a notification message

val subscribe : id:int -> channel:string -> message

Create a subscribe message

val unsubscribe : id:int -> message

Create an unsubscribe message

val data : id:int -> data:Value.t -> message

Create a data message (subscription data push)

val complete : id:int -> message

Create a complete message (subscription ended)

Message Inspection

val message_type : message -> string

Get the message type name

val message_id : message -> int option

Get the message ID if present

val expects_response : message -> bool

Check if message expects a response

val is_server_message : message -> bool

Check if message is a server-to-client message

val is_client_message : message -> bool

Check if message is a client-to-server message

Pretty Printing

val pp : Format.formatter -> message -> unit

Pretty print a message

val to_string : message -> string

Convert message to string

Message Encoding

Note: Full JSON/binary encoding is implemented in the codec module.

module Type_code : sig ... end

Message type codes for wire protocol