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 responseResponse: Server responds with dataError: Server responds with errorNotification: Fire-and-forget message (no response expected)Subscribe: Client subscribes to a channelUnsubscribe: Client unsubscribes from a channelData: Server pushes data on a subscriptionComplete: Server signals subscription is complete
Message Constructors
val request : id:int -> method_:string -> ?data:Value.t -> unit -> messageCreate a request message
val response : id:int -> data:Value.t -> messageCreate a response message
val error : id:int -> error:Value.t -> messageCreate an error message
val notification : method_:string -> ?data:Value.t -> unit -> messageCreate a notification message
val subscribe : id:int -> channel:string -> messageCreate a subscribe message
val unsubscribe : id:int -> messageCreate an unsubscribe message
val data : id:int -> data:Value.t -> messageCreate a data message (subscription data push)
val complete : id:int -> messageCreate a complete message (subscription ended)
Message Inspection
val message_type : message -> stringGet the message type name
val message_id : message -> int optionGet the message ID if present
val expects_response : message -> boolCheck if message expects a response
val is_server_message : message -> boolCheck if message is a server-to-client message
val is_client_message : message -> boolCheck if message is a client-to-server message
Pretty Printing
val pp : Format.formatter -> message -> unitPretty print a message
val to_string : message -> stringConvert message to string
Message Encoding
Note: Full JSON/binary encoding is implemented in the codec module.
module Type_code : sig ... endMessage type codes for wire protocol