sig
  module Implementations : sig type 'a t end
  type t
  val create :
    ?implementations:'Rpc_intf.Connection.Implementations.t ->
    connection_state:'->
    ?max_message_size:int ->
    Import.Reader.t ->
    Import.Writer.t ->
    (Rpc_intf.Connection.t, Core.Std.Exn.t) Core.Std.Result.t
    Import.Deferred.t
  val close : Rpc_intf.Connection.t -> unit Import.Deferred.t
  val close_finished : Rpc_intf.Connection.t -> unit Import.Deferred.t
  val is_closed : Rpc_intf.Connection.t -> bool
  val bytes_to_write : Rpc_intf.Connection.t -> int
  val with_close :
    ?implementations:'Rpc_intf.Connection.Implementations.t ->
    connection_state:'->
    Import.Reader.t ->
    Import.Writer.t ->
    dispatch_queries:(Rpc_intf.Connection.t -> 'Import.Deferred.t) ->
    on_handshake_error:[ `Call of Core.Std.Exn.t -> 'Import.Deferred.t
                       | `Raise ] ->
    'Import.Deferred.t
  val server_with_close :
    Import.Reader.t ->
    Import.Writer.t ->
    implementations:'Rpc_intf.Connection.Implementations.t ->
    connection_state:'->
    on_handshake_error:[ `Call of Core.Std.Exn.t -> unit Import.Deferred.t
                       | `Ignore
                       | `Raise ] ->
    unit Import.Deferred.t
  val serve :
    implementations:'Rpc_intf.Connection.Implementations.t ->
    initial_connection_state:(([< Import.Socket.Address.t ] as 'a) -> 's) ->
    where_to_listen:('a, 'listening_on) Tcp.Where_to_listen.t ->
    ?auth:('-> bool) ->
    ?on_handshake_error:[ `Call of Core.Std.Exn.t -> unit | `Ignore | `Raise ] ->
    unit -> ('a, 'listening_on) Tcp.Server.t Import.Deferred.t
  val client :
    host:string ->
    port:int ->
    (Rpc_intf.Connection.t, Core.Std.Exn.t) Core.Std.Result.t
    Import.Deferred.t
  val with_client :
    host:string ->
    port:int ->
    (Rpc_intf.Connection.t -> 'Import.Deferred.t) ->
    ('a, Core.Std.Exn.t) Core.Std.Result.t Import.Deferred.t
end