sig
  module Menu :
    sig
      type t
      val add : 'Rpc.Implementation.t list -> 'Rpc.Implementation.t list
      val request :
        Rpc.Connection.t ->
        Versioned_rpc.Menu.t Core.Std.Or_error.t Import.Deferred.t
      val supported_rpcs :
        Versioned_rpc.Menu.t -> Rpc.Implementation.Description.t list
      val supported_versions :
        Versioned_rpc.Menu.t -> rpc_name:string -> Core.Std.Int.Set.t
    end
  module Connection_with_menu :
    sig
      type t
      val create :
        Rpc.Connection.t ->
        Versioned_rpc.Connection_with_menu.t Import.Deferred.Or_error.t
      val connection :
        Versioned_rpc.Connection_with_menu.t -> Rpc.Connection.t
      val menu : Versioned_rpc.Connection_with_menu.t -> Versioned_rpc.Menu.t
    end
  module Caller_converts :
    sig
      module Rpc :
        sig
          module type S =
            sig
              type query
              type response
              val deprecated_dispatch_multi :
                version:int ->
                Rpc.Connection.t ->
                Versioned_rpc.Caller_converts.Rpc.S.query ->
                Versioned_rpc.Caller_converts.Rpc.S.response
                Core.Std.Or_error.t Import.Deferred.t
              val dispatch_multi :
                Versioned_rpc.Connection_with_menu.t ->
                Versioned_rpc.Caller_converts.Rpc.S.query ->
                Versioned_rpc.Caller_converts.Rpc.S.response
                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 end->
              sig
                module Register :
                  functor
                    (Version_i : sig
                                   val version : int
                                   type query
                                   type response
                                   val query_of_model :
                                     Model.query ->
                                     Versioned_rpc.Caller_converts.Rpc.Make.Register.query
                                   val model_of_response :
                                     Versioned_rpc.Caller_converts.Rpc.Make.Register.response ->
                                     Model.response
                                   val bin_query :
                                     Versioned_rpc.Caller_converts.Rpc.Make.Register.query
                                     Core.Std.Bin_prot.Type_class.t
                                   val bin_read_query :
                                     Versioned_rpc.Caller_converts.Rpc.Make.Register.query
                                     Core.Std.Bin_prot.Read_ml.reader
                                   val bin_read_query_ :
                                     Versioned_rpc.Caller_converts.Rpc.Make.Register.query
                                     Core.Std.Bin_prot.Unsafe_read_c.reader
                                   val bin_read_query__ :
                                     (int ->
                                      Versioned_rpc.Caller_converts.Rpc.Make.Register.query)
                                     Core.Std.Bin_prot.Unsafe_read_c.reader
                                   val bin_reader_query :
                                     Versioned_rpc.Caller_converts.Rpc.Make.Register.query
                                     Core.Std.Bin_prot.Type_class.reader
                                   val bin_size_query :
                                     Versioned_rpc.Caller_converts.Rpc.Make.Register.query
                                     Core.Std.Bin_prot.Size.sizer
                                   val bin_write_query :
                                     Versioned_rpc.Caller_converts.Rpc.Make.Register.query
                                     Core.Std.Bin_prot.Write_ml.writer
                                   val bin_write_query_ :
                                     Versioned_rpc.Caller_converts.Rpc.Make.Register.query
                                     Core.Std.Bin_prot.Unsafe_write_c.writer
                                   val bin_writer_query :
                                     Versioned_rpc.Caller_converts.Rpc.Make.Register.query
                                     Core.Std.Bin_prot.Type_class.writer
                                   val bin_response :
                                     Versioned_rpc.Caller_converts.Rpc.Make.Register.response
                                     Core.Std.Bin_prot.Type_class.t
                                   val bin_read_response :
                                     Versioned_rpc.Caller_converts.Rpc.Make.Register.response
                                     Core.Std.Bin_prot.Read_ml.reader
                                   val bin_read_response_ :
                                     Versioned_rpc.Caller_converts.Rpc.Make.Register.response
                                     Core.Std.Bin_prot.Unsafe_read_c.reader
                                   val bin_read_response__ :
                                     (int ->
                                      Versioned_rpc.Caller_converts.Rpc.Make.Register.response)
                                     Core.Std.Bin_prot.Unsafe_read_c.reader
                                   val bin_reader_response :
                                     Versioned_rpc.Caller_converts.Rpc.Make.Register.response
                                     Core.Std.Bin_prot.Type_class.reader
                                   val bin_size_response :
                                     Versioned_rpc.Caller_converts.Rpc.Make.Register.response
                                     Core.Std.Bin_prot.Size.sizer
                                   val bin_write_response :
                                     Versioned_rpc.Caller_converts.Rpc.Make.Register.response
                                     Core.Std.Bin_prot.Write_ml.writer
                                   val bin_write_response_ :
                                     Versioned_rpc.Caller_converts.Rpc.Make.Register.response
                                     Core.Std.Bin_prot.Unsafe_write_c.writer
                                   val bin_writer_response :
                                     Versioned_rpc.Caller_converts.Rpc.Make.Register.response
                                     Core.Std.Bin_prot.Type_class.writer
                                 end->
                    sig
                      val rpc :
                        (Version_i.query, Version_i.response) Rpc.Rpc.t
                    end
                val deprecated_dispatch_multi :
                  version:int ->
                  Rpc.Connection.t ->
                  Model.query ->
                  Model.response Core.Std.Or_error.t Import.Deferred.t
                val dispatch_multi :
                  Connection_with_menu.t ->
                  Model.query ->
                  Model.response Core.Std.Or_error.t Import.Deferred.t
                val versions : unit -> Core.Std.Int.Set.t
              end
        end
      module Pipe_rpc :
        sig
          module type S =
            sig
              type query
              type response
              type error
              val deprecated_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 dispatch_multi :
                Versioned_rpc.Connection_with_menu.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 deprecated_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 dispatch_multi :
                  Connection_with_menu.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
    end
  module Callee_converts :
    sig
      module Rpc :
        sig
          module type S =
            sig
              type query
              type response
              val implement_multi :
                ?log_not_previously_seen_version:(name:string -> int -> unit) ->
                ('state ->
                 Versioned_rpc.Callee_converts.Rpc.S.query ->
                 Versioned_rpc.Callee_converts.Rpc.S.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 type query type response end->
              sig
                module Register :
                  functor
                    (Version_i : sig
                                   val version : int
                                   type query
                                   type response
                                   val model_of_query :
                                     Versioned_rpc.Callee_converts.Rpc.Make.Register.query ->
                                     Model.query
                                   val response_of_model :
                                     Model.response ->
                                     Versioned_rpc.Callee_converts.Rpc.Make.Register.response
                                   val bin_query :
                                     Versioned_rpc.Callee_converts.Rpc.Make.Register.query
                                     Core.Std.Bin_prot.Type_class.t
                                   val bin_read_query :
                                     Versioned_rpc.Callee_converts.Rpc.Make.Register.query
                                     Core.Std.Bin_prot.Read_ml.reader
                                   val bin_read_query_ :
                                     Versioned_rpc.Callee_converts.Rpc.Make.Register.query
                                     Core.Std.Bin_prot.Unsafe_read_c.reader
                                   val bin_read_query__ :
                                     (int ->
                                      Versioned_rpc.Callee_converts.Rpc.Make.Register.query)
                                     Core.Std.Bin_prot.Unsafe_read_c.reader
                                   val bin_reader_query :
                                     Versioned_rpc.Callee_converts.Rpc.Make.Register.query
                                     Core.Std.Bin_prot.Type_class.reader
                                   val bin_size_query :
                                     Versioned_rpc.Callee_converts.Rpc.Make.Register.query
                                     Core.Std.Bin_prot.Size.sizer
                                   val bin_write_query :
                                     Versioned_rpc.Callee_converts.Rpc.Make.Register.query
                                     Core.Std.Bin_prot.Write_ml.writer
                                   val bin_write_query_ :
                                     Versioned_rpc.Callee_converts.Rpc.Make.Register.query
                                     Core.Std.Bin_prot.Unsafe_write_c.writer
                                   val bin_writer_query :
                                     Versioned_rpc.Callee_converts.Rpc.Make.Register.query
                                     Core.Std.Bin_prot.Type_class.writer
                                   val bin_response :
                                     Versioned_rpc.Callee_converts.Rpc.Make.Register.response
                                     Core.Std.Bin_prot.Type_class.t
                                   val bin_read_response :
                                     Versioned_rpc.Callee_converts.Rpc.Make.Register.response
                                     Core.Std.Bin_prot.Read_ml.reader
                                   val bin_read_response_ :
                                     Versioned_rpc.Callee_converts.Rpc.Make.Register.response
                                     Core.Std.Bin_prot.Unsafe_read_c.reader
                                   val bin_read_response__ :
                                     (int ->
                                      Versioned_rpc.Callee_converts.Rpc.Make.Register.response)
                                     Core.Std.Bin_prot.Unsafe_read_c.reader
                                   val bin_reader_response :
                                     Versioned_rpc.Callee_converts.Rpc.Make.Register.response
                                     Core.Std.Bin_prot.Type_class.reader
                                   val bin_size_response :
                                     Versioned_rpc.Callee_converts.Rpc.Make.Register.response
                                     Core.Std.Bin_prot.Size.sizer
                                   val bin_write_response :
                                     Versioned_rpc.Callee_converts.Rpc.Make.Register.response
                                     Core.Std.Bin_prot.Write_ml.writer
                                   val bin_write_response_ :
                                     Versioned_rpc.Callee_converts.Rpc.Make.Register.response
                                     Core.Std.Bin_prot.Unsafe_write_c.writer
                                   val bin_writer_response :
                                     Versioned_rpc.Callee_converts.Rpc.Make.Register.response
                                     Core.Std.Bin_prot.Type_class.writer
                                 end->
                    sig
                      val rpc :
                        (Version_i.query, Version_i.response) Rpc.Rpc.t
                    end
                val implement_multi :
                  ?log_not_previously_seen_version:(name:string ->
                                                    int -> unit) ->
                  ('state -> Model.query -> Model.response Import.Deferred.t) ->
                  'state Rpc.Implementation.t list
                val versions : unit -> Core.Std.Int.Set.t
              end
        end
      module Pipe_rpc :
        sig
          module type S =
            sig
              type query
              type response
              type error
              val implement_multi :
                ?log_not_previously_seen_version:(name:string -> int -> unit) ->
                ('state ->
                 Versioned_rpc.Callee_converts.Pipe_rpc.S.query ->
                 aborted:unit Import.Deferred.t ->
                 (Versioned_rpc.Callee_converts.Pipe_rpc.S.response
                  Import.Pipe.Reader.t,
                  Versioned_rpc.Callee_converts.Pipe_rpc.S.error)
                 Core.Std.Result.t 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
                         type query
                         type response
                         type error
                       end->
              sig
                module Register :
                  functor
                    (Version_i : sig
                                   val version : int
                                   type query
                                   type response
                                   type error
                                   val model_of_query :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query ->
                                     Model.query
                                   val response_of_model :
                                     Model.response ->
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response
                                   val error_of_model :
                                     Model.error ->
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.error
                                   val bin_query :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query
                                     Core.Std.Bin_prot.Type_class.t
                                   val bin_read_query :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query
                                     Core.Std.Bin_prot.Read_ml.reader
                                   val bin_read_query_ :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query
                                     Core.Std.Bin_prot.Unsafe_read_c.reader
                                   val bin_read_query__ :
                                     (int ->
                                      Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query)
                                     Core.Std.Bin_prot.Unsafe_read_c.reader
                                   val bin_reader_query :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query
                                     Core.Std.Bin_prot.Type_class.reader
                                   val bin_size_query :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query
                                     Core.Std.Bin_prot.Size.sizer
                                   val bin_write_query :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query
                                     Core.Std.Bin_prot.Write_ml.writer
                                   val bin_write_query_ :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query
                                     Core.Std.Bin_prot.Unsafe_write_c.writer
                                   val bin_writer_query :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query
                                     Core.Std.Bin_prot.Type_class.writer
                                   val bin_response :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response
                                     Core.Std.Bin_prot.Type_class.t
                                   val bin_read_response :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response
                                     Core.Std.Bin_prot.Read_ml.reader
                                   val bin_read_response_ :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response
                                     Core.Std.Bin_prot.Unsafe_read_c.reader
                                   val bin_read_response__ :
                                     (int ->
                                      Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response)
                                     Core.Std.Bin_prot.Unsafe_read_c.reader
                                   val bin_reader_response :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response
                                     Core.Std.Bin_prot.Type_class.reader
                                   val bin_size_response :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response
                                     Core.Std.Bin_prot.Size.sizer
                                   val bin_write_response :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response
                                     Core.Std.Bin_prot.Write_ml.writer
                                   val bin_write_response_ :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response
                                     Core.Std.Bin_prot.Unsafe_write_c.writer
                                   val bin_writer_response :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response
                                     Core.Std.Bin_prot.Type_class.writer
                                   val bin_error :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.error
                                     Core.Std.Bin_prot.Type_class.t
                                   val bin_read_error :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.error
                                     Core.Std.Bin_prot.Read_ml.reader
                                   val bin_read_error_ :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.error
                                     Core.Std.Bin_prot.Unsafe_read_c.reader
                                   val bin_read_error__ :
                                     (int ->
                                      Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.error)
                                     Core.Std.Bin_prot.Unsafe_read_c.reader
                                   val bin_reader_error :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.error
                                     Core.Std.Bin_prot.Type_class.reader
                                   val bin_size_error :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.error
                                     Core.Std.Bin_prot.Size.sizer
                                   val bin_write_error :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.error
                                     Core.Std.Bin_prot.Write_ml.writer
                                   val bin_write_error_ :
                                     Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.error
                                     Core.Std.Bin_prot.Unsafe_write_c.writer
                                   val bin_writer_error :
                                     Versioned_rpc.Callee_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 implement_multi :
                  ?log_not_previously_seen_version:(name:string ->
                                                    int -> unit) ->
                  ('state ->
                   Model.query ->
                   aborted:unit Import.Deferred.t ->
                   (Model.response Import.Pipe.Reader.t, Model.error)
                   Core.Std.Result.t Import.Deferred.t) ->
                  'state Rpc.Implementation.t list
                val versions : unit -> Core.Std.Int.Set.t
              end
        end
    end
  module Both_convert :
    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
end