sig
  type ('query, 'state, 'update, 'error) t
  module Id : sig type t end
  val create :
    name:string ->
    version:int ->
    bin_query:'query Core.Std.Bin_prot.Type_class.t ->
    bin_state:'state Core.Std.Bin_prot.Type_class.t ->
    bin_update:'update Core.Std.Bin_prot.Type_class.t ->
    bin_error:'error Core.Std.Bin_prot.Type_class.t ->
    ('query, 'state, 'update, 'error) Rpc.State_rpc.t
  val implement :
    ('query, 'state, 'update, 'error) Rpc.State_rpc.t ->
    ('connection_state ->
     'query ->
     aborted:unit Import.Deferred.t ->
     ('state * 'update Import.Pipe.Reader.t, 'error) Core.Std.Result.t
     Import.Deferred.t) ->
    'connection_state Rpc.Implementation.t
  val dispatch :
    ('query, 'state, 'update, 'error) Rpc.State_rpc.t ->
    Rpc.Connection.t ->
    'query ->
    update:('state -> 'update -> 'state) ->
    ('state * ('state * 'update) Import.Pipe.Reader.t * Rpc.State_rpc.Id.t,
     'error)
    Core.Std.Result.t Core.Std.Or_error.t Import.Deferred.t
  val abort :
    ('a, 'b, 'c, 'd) Rpc.State_rpc.t ->
    Rpc.Connection.t -> Rpc.State_rpc.Id.t -> unit
  val name : ('a, 'b, 'c, 'd) Rpc.State_rpc.t -> string
  val version : ('a, 'b, 'c, 'd) Rpc.State_rpc.t -> int
end