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.Make.Register.query ->
                         Model.query
                       val response_of_model :
                         Model.response ->
                         Versioned_rpc.Callee_converts.Make.Register.response
                       val bin_query :
                         Versioned_rpc.Callee_converts.Make.Register.query
                         Core.Std.Bin_prot.Type_class.t
                       val bin_read_query :
                         Versioned_rpc.Callee_converts.Make.Register.query
                         Core.Std.Bin_prot.Read_ml.reader
                       val bin_read_query_ :
                         Versioned_rpc.Callee_converts.Make.Register.query
                         Core.Std.Bin_prot.Unsafe_read_c.reader
                       val bin_read_query__ :
                         (int ->
                          Versioned_rpc.Callee_converts.Make.Register.query)
                         Core.Std.Bin_prot.Unsafe_read_c.reader
                       val bin_reader_query :
                         Versioned_rpc.Callee_converts.Make.Register.query
                         Core.Std.Bin_prot.Type_class.reader
                       val bin_size_query :
                         Versioned_rpc.Callee_converts.Make.Register.query
                         Core.Std.Bin_prot.Size.sizer
                       val bin_write_query :
                         Versioned_rpc.Callee_converts.Make.Register.query
                         Core.Std.Bin_prot.Write_ml.writer
                       val bin_write_query_ :
                         Versioned_rpc.Callee_converts.Make.Register.query
                         Core.Std.Bin_prot.Unsafe_write_c.writer
                       val bin_writer_query :
                         Versioned_rpc.Callee_converts.Make.Register.query
                         Core.Std.Bin_prot.Type_class.writer
                       val bin_response :
                         Versioned_rpc.Callee_converts.Make.Register.response
                         Core.Std.Bin_prot.Type_class.t
                       val bin_read_response :
                         Versioned_rpc.Callee_converts.Make.Register.response
                         Core.Std.Bin_prot.Read_ml.reader
                       val bin_read_response_ :
                         Versioned_rpc.Callee_converts.Make.Register.response
                         Core.Std.Bin_prot.Unsafe_read_c.reader
                       val bin_read_response__ :
                         (int ->
                          Versioned_rpc.Callee_converts.Make.Register.response)
                         Core.Std.Bin_prot.Unsafe_read_c.reader
                       val bin_reader_response :
                         Versioned_rpc.Callee_converts.Make.Register.response
                         Core.Std.Bin_prot.Type_class.reader
                       val bin_size_response :
                         Versioned_rpc.Callee_converts.Make.Register.response
                         Core.Std.Bin_prot.Size.sizer
                       val bin_write_response :
                         Versioned_rpc.Callee_converts.Make.Register.response
                         Core.Std.Bin_prot.Write_ml.writer
                       val bin_write_response_ :
                         Versioned_rpc.Callee_converts.Make.Register.response
                         Core.Std.Bin_prot.Unsafe_write_c.writer
                       val bin_writer_response :
                         Versioned_rpc.Callee_converts.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