sig
  module type S =
    sig
      type query
      type response
      type error
      val dispatch_multi :
        version:int ->
        Rpc.Connection.t ->
        Versioned_rpc.Caller_converts.Pipe_rpc.S.query ->
        (Versioned_rpc.Caller_converts.Pipe_rpc.S.response
         Core.Std.Or_error.t Import.Pipe.Reader.t * Rpc.Pipe_rpc.Id.t,
         Versioned_rpc.Caller_converts.Pipe_rpc.S.error)
        Core.Std.Result.t Core.Std.Or_error.t Import.Deferred.t
      val versions : unit -> Core.Std.Int.Set.t
    end
  module Make :
    functor
      (Model : sig val name : string type query type response type error end->
      sig
        module Register :
          functor
            (Version_i : sig
                           val version : int
                           type query
                           type response
                           type error
                           val query_of_model :
                             Model.query ->
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.query
                           val model_of_response :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.response ->
                             Model.response
                           val model_of_error :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.error ->
                             Model.error
                           val bin_query :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.query
                             Core.Std.Bin_prot.Type_class.t
                           val bin_read_query :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.query
                             Core.Std.Bin_prot.Read_ml.reader
                           val bin_read_query_ :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.query
                             Core.Std.Bin_prot.Unsafe_read_c.reader
                           val bin_read_query__ :
                             (int ->
                              Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.query)
                             Core.Std.Bin_prot.Unsafe_read_c.reader
                           val bin_reader_query :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.query
                             Core.Std.Bin_prot.Type_class.reader
                           val bin_size_query :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.query
                             Core.Std.Bin_prot.Size.sizer
                           val bin_write_query :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.query
                             Core.Std.Bin_prot.Write_ml.writer
                           val bin_write_query_ :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.query
                             Core.Std.Bin_prot.Unsafe_write_c.writer
                           val bin_writer_query :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.query
                             Core.Std.Bin_prot.Type_class.writer
                           val bin_response :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.response
                             Core.Std.Bin_prot.Type_class.t
                           val bin_read_response :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.response
                             Core.Std.Bin_prot.Read_ml.reader
                           val bin_read_response_ :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.response
                             Core.Std.Bin_prot.Unsafe_read_c.reader
                           val bin_read_response__ :
                             (int ->
                              Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.response)
                             Core.Std.Bin_prot.Unsafe_read_c.reader
                           val bin_reader_response :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.response
                             Core.Std.Bin_prot.Type_class.reader
                           val bin_size_response :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.response
                             Core.Std.Bin_prot.Size.sizer
                           val bin_write_response :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.response
                             Core.Std.Bin_prot.Write_ml.writer
                           val bin_write_response_ :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.response
                             Core.Std.Bin_prot.Unsafe_write_c.writer
                           val bin_writer_response :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.response
                             Core.Std.Bin_prot.Type_class.writer
                           val bin_error :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.error
                             Core.Std.Bin_prot.Type_class.t
                           val bin_read_error :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.error
                             Core.Std.Bin_prot.Read_ml.reader
                           val bin_read_error_ :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.error
                             Core.Std.Bin_prot.Unsafe_read_c.reader
                           val bin_read_error__ :
                             (int ->
                              Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.error)
                             Core.Std.Bin_prot.Unsafe_read_c.reader
                           val bin_reader_error :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.error
                             Core.Std.Bin_prot.Type_class.reader
                           val bin_size_error :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.error
                             Core.Std.Bin_prot.Size.sizer
                           val bin_write_error :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.error
                             Core.Std.Bin_prot.Write_ml.writer
                           val bin_write_error_ :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.error
                             Core.Std.Bin_prot.Unsafe_write_c.writer
                           val bin_writer_error :
                             Versioned_rpc.Caller_converts.Pipe_rpc.Make.Register.error
                             Core.Std.Bin_prot.Type_class.writer
                         end->
            sig
              val rpc :
                (Version_i.query, Version_i.response, Version_i.error)
                Rpc.Pipe_rpc.t
            end
        val dispatch_multi :
          version:int ->
          Rpc.Connection.t ->
          Model.query ->
          (Model.response Core.Std.Or_error.t Import.Pipe.Reader.t *
           Rpc.Pipe_rpc.Id.t, Model.error)
          Core.Std.Result.t Core.Std.Or_error.t Import.Deferred.t
        val versions : unit -> Core.Std.Int.Set.t
      end
end