A state rpc is an easy way for two processes to synchronize a data structure by sending updates over the wire. It's basically a pipe rpc that sends/receives an initial state of the data structure, and then updates, and applies the updates under the covers.
module Id : sig ... end
module Metadata : sig ... end
val create : ?client_pushes_back:unit ‑> name:string ‑> version:int ‑> bin_query:'query Bin_prot.Type_class.t ‑> bin_state:'state Bin_prot.Type_class.t ‑> bin_update:'update Bin_prot.Type_class.t ‑> bin_error:'error Bin_prot.Type_class.t ‑> unit ‑> ('query, 'state, 'update, 'error) t
val bin_query : ('query, _, _, _) t ‑> 'query Bin_prot.Type_class.t
val bin_state : (_, 'state, _, _) t ‑> 'state Bin_prot.Type_class.t
val bin_update : (_, _, 'update, _) t ‑> 'update Bin_prot.Type_class.t
val bin_error : (_, _, _, 'error) t ‑> 'error Bin_prot.Type_class.t
val implement : ('query, 'state, 'update, 'error) t ‑> ('connection_state ‑> 'query ‑> ('state * 'update Async_kernel.Pipe.Reader.t, 'error) Core_kernel.Result.t Async_kernel.Deferred.t) ‑> 'connection_state Implementation.t
val dispatch : ('query, 'state, 'update, 'error) t ‑> Connection.t ‑> 'query ‑> ('state * 'update Async_kernel.Pipe.Reader.t * Metadata.t, 'error) Core_kernel.Result.t Core_kernel.Or_error.t Async_kernel.Deferred.t
val abort : (_, _, _, _) t ‑> Connection.t ‑> Id.t ‑> unit
val close_reason : Metadata.t ‑> Pipe_close_reason.t Async_kernel.Deferred.t
val name : (_, _, _, _) t ‑> string
val version : (_, _, _, _) t ‑> int
val description : (_, _, _, _) t ‑> Description.t