functor
  (Model : sig
             val name : string
             module Caller : sig type query type response end
             module Callee : sig type query type response end
           end->
  sig
    module Register :
      functor
        (Version : sig
                     val version : int
                     type query
                     type response
                     val query_of_caller_model :
                       Model.Caller.query ->
                       Versioned_rpc.Both_convert.Plain.Make.Register.query
                     val callee_model_of_query :
                       Versioned_rpc.Both_convert.Plain.Make.Register.query ->
                       Model.Callee.query
                     val response_of_callee_model :
                       Model.Callee.response ->
                       Versioned_rpc.Both_convert.Plain.Make.Register.response
                     val caller_model_of_response :
                       Versioned_rpc.Both_convert.Plain.Make.Register.response ->
                       Model.Caller.response
                     val bin_query :
                       Versioned_rpc.Both_convert.Plain.Make.Register.query
                       Core.Std.Bin_prot.Type_class.t
                     val bin_read_query :
                       Versioned_rpc.Both_convert.Plain.Make.Register.query
                       Core.Std.Bin_prot.Read.reader
                     val __bin_read_query__ :
                       (int ->
                        Versioned_rpc.Both_convert.Plain.Make.Register.query)
                       Core.Std.Bin_prot.Read.reader
                     val bin_reader_query :
                       Versioned_rpc.Both_convert.Plain.Make.Register.query
                       Core.Std.Bin_prot.Type_class.reader
                     val bin_size_query :
                       Versioned_rpc.Both_convert.Plain.Make.Register.query
                       Core.Std.Bin_prot.Size.sizer
                     val bin_write_query :
                       Versioned_rpc.Both_convert.Plain.Make.Register.query
                       Core.Std.Bin_prot.Write.writer
                     val bin_writer_query :
                       Versioned_rpc.Both_convert.Plain.Make.Register.query
                       Core.Std.Bin_prot.Type_class.writer
                     val bin_response :
                       Versioned_rpc.Both_convert.Plain.Make.Register.response
                       Core.Std.Bin_prot.Type_class.t
                     val bin_read_response :
                       Versioned_rpc.Both_convert.Plain.Make.Register.response
                       Core.Std.Bin_prot.Read.reader
                     val __bin_read_response__ :
                       (int ->
                        Versioned_rpc.Both_convert.Plain.Make.Register.response)
                       Core.Std.Bin_prot.Read.reader
                     val bin_reader_response :
                       Versioned_rpc.Both_convert.Plain.Make.Register.response
                       Core.Std.Bin_prot.Type_class.reader
                     val bin_size_response :
                       Versioned_rpc.Both_convert.Plain.Make.Register.response
                       Core.Std.Bin_prot.Size.sizer
                     val bin_write_response :
                       Versioned_rpc.Both_convert.Plain.Make.Register.response
                       Core.Std.Bin_prot.Write.writer
                     val bin_writer_response :
                       Versioned_rpc.Both_convert.Plain.Make.Register.response
                       Core.Std.Bin_prot.Type_class.writer
                   end->
        sig  end
    val dispatch_multi :
      Connection_with_menu.t ->
      Model.Caller.query ->
      Model.Caller.response Core.Std.Or_error.t Import.Deferred.t
    val implement_multi :
      ?log_not_previously_seen_version:(name:string -> int -> unit) ->
      ('state ->
       Model.Callee.query -> Model.Callee.response Import.Deferred.t) ->
      'state Rpc.Implementation.t list
    val versions : unit -> Core.Std.Int.Set.t
  end