sig
  type ('query, 'response, '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_response:'response Core.Std.Bin_prot.Type_class.t ->
    bin_error:'error Core.Std.Bin_prot.Type_class.t ->
    ('query, 'response, 'error) Rpc.Pipe_rpc.t
  val implement :
    ('query, 'response, 'error) Rpc.Pipe_rpc.t ->
    ('connection_state ->
     'query ->
     aborted:unit Import.Deferred.t ->
     ('response Import.Pipe.Reader.t, 'error) Core.Std.Result.t
     Import.Deferred.t) ->
    'connection_state Rpc.Implementation.t
  val dispatch :
    ('query, 'response, 'error) Rpc.Pipe_rpc.t ->
    Rpc.Connection.t ->
    'query ->
    ('response Import.Pipe.Reader.t * Rpc.Pipe_rpc.Id.t, 'error)
    Core.Std.Result.t Core.Std.Or_error.t Import.Deferred.t
  val dispatch_exn :
    ('query, 'response, 'error) Rpc.Pipe_rpc.t ->
    Rpc.Connection.t ->
    'query ->
    ('response Import.Pipe.Reader.t * Rpc.Pipe_rpc.Id.t) Import.Deferred.t
  val abort :
    ('a, 'b, 'c) Rpc.Pipe_rpc.t ->
    Rpc.Connection.t -> Rpc.Pipe_rpc.Id.t -> unit
  val name : ('a, 'b, 'c) Rpc.Pipe_rpc.t -> string
  val version : ('a, 'b, 'c) Rpc.Pipe_rpc.t -> int
end