sig
  module Plain :
    sig
      module type S =
        sig
          type caller_query
          type caller_response
          type callee_query
          type callee_response
          val dispatch_multi :
            Versioned_rpc.Connection_with_menu.t ->
            Versioned_rpc.Both_convert.Plain.S.caller_query ->
            Versioned_rpc.Both_convert.Plain.S.caller_response
            Core.Std.Or_error.t Import.Deferred.t
          val implement_multi :
            ?log_not_previously_seen_version:(name:string -> int -> unit) ->
            ('state ->
             Versioned_rpc.Both_convert.Plain.S.callee_query ->
             Versioned_rpc.Both_convert.Plain.S.callee_response
             Import.Deferred.t) ->
            'state Rpc.Implementation.t list
          val versions : unit -> Core.Std.Int.Set.t
        end
      module Make :
        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_ml.reader
                             val bin_read_query_ :
                               Versioned_rpc.Both_convert.Plain.Make.Register.query
                               Core.Std.Bin_prot.Unsafe_read_c.reader
                             val bin_read_query__ :
                               (int ->
                                Versioned_rpc.Both_convert.Plain.Make.Register.query)
                               Core.Std.Bin_prot.Unsafe_read_c.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_ml.writer
                             val bin_write_query_ :
                               Versioned_rpc.Both_convert.Plain.Make.Register.query
                               Core.Std.Bin_prot.Unsafe_write_c.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_ml.reader
                             val bin_read_response_ :
                               Versioned_rpc.Both_convert.Plain.Make.Register.response
                               Core.Std.Bin_prot.Unsafe_read_c.reader
                             val bin_read_response__ :
                               (int ->
                                Versioned_rpc.Both_convert.Plain.Make.Register.response)
                               Core.Std.Bin_prot.Unsafe_read_c.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_ml.writer
                             val bin_write_response_ :
                               Versioned_rpc.Both_convert.Plain.Make.Register.response
                               Core.Std.Bin_prot.Unsafe_write_c.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
    end
end