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