sig
  type t
  val create :
    ?do_logging:bool ->
    extend_error:(Core.Std.Error.t -> unit) ->
    extend_status:(string -> unit) ->
    extend_execution:(Response.Execution.t -> unit) ->
    extend_commission:(Response.Commission.t -> unit) ->
    Async.Std.Reader.t ->
    Async.Std.Writer.t -> Ib.Connection.t Async.Std.Deferred.t
  val close : Ib.Connection.t -> unit Async.Std.Deferred.t
  val closed : Ib.Connection.t -> unit Async.Std.Deferred.t
  val is_closed : Ib.Connection.t -> bool
  val set_server_log_level :
    Ib.Connection.t ->
    level:[ `Detail | `Error | `Information | `System | `Warning ] -> unit
  module Handshake_result :
    sig
      type t =
          Eof
        | Version_failure of int
        | Server_header of [ `Version of int ] * Core.Std.Time.t *
            Account_code.t
      val t_of_sexp : Sexplib.Sexp.t -> Ib.Connection.Handshake_result.t
      val sexp_of_t : Ib.Connection.Handshake_result.t -> Sexplib.Sexp.t
    end
  val try_connect :
    Ib.Connection.t ->
    client_version:int ->
    client_id:Client_id.t ->
    Ib.Connection.Handshake_result.t Core.Std.Or_error.t Async.Std.Deferred.t
end