sig
  module Response :
    sig
      type t = { _ref : string; }
      val _ref :
        (GapiDiscoveryV1Model.RestMethod.Response.t, string) GapiLens.t
      val empty : GapiDiscoveryV1Model.RestMethod.Response.t
      val render :
        GapiDiscoveryV1Model.RestMethod.Response.t ->
        GapiJson.json_data_model list
      val parse :
        GapiDiscoveryV1Model.RestMethod.Response.t ->
        GapiJson.json_data_model ->
        GapiDiscoveryV1Model.RestMethod.Response.t
    end
  module Request :
    sig
      type t = { _ref : string; parameterName : string; }
      val _ref :
        (GapiDiscoveryV1Model.RestMethod.Request.t, string) GapiLens.t
      val parameterName :
        (GapiDiscoveryV1Model.RestMethod.Request.t, string) GapiLens.t
      val empty : GapiDiscoveryV1Model.RestMethod.Request.t
      val render :
        GapiDiscoveryV1Model.RestMethod.Request.t ->
        GapiJson.json_data_model list
      val parse :
        GapiDiscoveryV1Model.RestMethod.Request.t ->
        GapiJson.json_data_model -> GapiDiscoveryV1Model.RestMethod.Request.t
    end
  module MediaUpload :
    sig
      module Protocols :
        sig
          module Simple :
            sig
              type t = { multipart : bool; path : string; }
              val multipart :
                (GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.Simple.t,
                 bool)
                GapiLens.t
              val path :
                (GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.Simple.t,
                 string)
                GapiLens.t
              val empty :
                GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.Simple.t
              val render :
                GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.Simple.t ->
                GapiJson.json_data_model list
              val parse :
                GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.Simple.t ->
                GapiJson.json_data_model ->
                GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.Simple.t
            end
          module Resumable :
            sig
              type t = { multipart : bool; path : string; }
              val multipart :
                (GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.Resumable.t,
                 bool)
                GapiLens.t
              val path :
                (GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.Resumable.t,
                 string)
                GapiLens.t
              val empty :
                GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.Resumable.t
              val render :
                GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.Resumable.t ->
                GapiJson.json_data_model list
              val parse :
                GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.Resumable.t ->
                GapiJson.json_data_model ->
                GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.Resumable.t
            end
          type t = {
            resumable :
              GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.Resumable.t;
            simple :
              GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.Simple.t;
          }
          val resumable :
            (GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.t,
             GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.Resumable.t)
            GapiLens.t
          val simple :
            (GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.t,
             GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.Simple.t)
            GapiLens.t
          val empty : GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.t
          val render :
            GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.t ->
            GapiJson.json_data_model list
          val parse :
            GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.t ->
            GapiJson.json_data_model ->
            GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.t
        end
      type t = {
        accept : string list;
        maxSize : string;
        protocols : GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.t;
      }
      val accept :
        (GapiDiscoveryV1Model.RestMethod.MediaUpload.t, string list)
        GapiLens.t
      val maxSize :
        (GapiDiscoveryV1Model.RestMethod.MediaUpload.t, string) GapiLens.t
      val protocols :
        (GapiDiscoveryV1Model.RestMethod.MediaUpload.t,
         GapiDiscoveryV1Model.RestMethod.MediaUpload.Protocols.t)
        GapiLens.t
      val empty : GapiDiscoveryV1Model.RestMethod.MediaUpload.t
      val render :
        GapiDiscoveryV1Model.RestMethod.MediaUpload.t ->
        GapiJson.json_data_model list
      val parse :
        GapiDiscoveryV1Model.RestMethod.MediaUpload.t ->
        GapiJson.json_data_model ->
        GapiDiscoveryV1Model.RestMethod.MediaUpload.t
    end
  type t = {
    description : string;
    etagRequired : bool;
    httpMethod : string;
    id : string;
    mediaUpload : GapiDiscoveryV1Model.RestMethod.MediaUpload.t;
    parameterOrder : string list;
    parameters : (string * GapiDiscoveryV1Model.JsonSchema.t) list;
    path : string;
    request : GapiDiscoveryV1Model.RestMethod.Request.t;
    response : GapiDiscoveryV1Model.RestMethod.Response.t;
    scopes : string list;
    supportsMediaDownload : bool;
    supportsMediaUpload : bool;
    supportsSubscription : bool;
    useMediaDownloadService : bool;
  }
  val description : (GapiDiscoveryV1Model.RestMethod.t, string) GapiLens.t
  val etagRequired : (GapiDiscoveryV1Model.RestMethod.t, bool) GapiLens.t
  val httpMethod : (GapiDiscoveryV1Model.RestMethod.t, string) GapiLens.t
  val id : (GapiDiscoveryV1Model.RestMethod.t, string) GapiLens.t
  val mediaUpload :
    (GapiDiscoveryV1Model.RestMethod.t,
     GapiDiscoveryV1Model.RestMethod.MediaUpload.t)
    GapiLens.t
  val parameterOrder :
    (GapiDiscoveryV1Model.RestMethod.t, string list) GapiLens.t
  val parameters :
    (GapiDiscoveryV1Model.RestMethod.t,
     (string * GapiDiscoveryV1Model.JsonSchema.t) list)
    GapiLens.t
  val path : (GapiDiscoveryV1Model.RestMethod.t, string) GapiLens.t
  val request :
    (GapiDiscoveryV1Model.RestMethod.t,
     GapiDiscoveryV1Model.RestMethod.Request.t)
    GapiLens.t
  val response :
    (GapiDiscoveryV1Model.RestMethod.t,
     GapiDiscoveryV1Model.RestMethod.Response.t)
    GapiLens.t
  val scopes : (GapiDiscoveryV1Model.RestMethod.t, string list) GapiLens.t
  val supportsMediaDownload :
    (GapiDiscoveryV1Model.RestMethod.t, bool) GapiLens.t
  val supportsMediaUpload :
    (GapiDiscoveryV1Model.RestMethod.t, bool) GapiLens.t
  val supportsSubscription :
    (GapiDiscoveryV1Model.RestMethod.t, bool) GapiLens.t
  val useMediaDownloadService :
    (GapiDiscoveryV1Model.RestMethod.t, bool) GapiLens.t
  val empty : GapiDiscoveryV1Model.RestMethod.t
  val render :
    GapiDiscoveryV1Model.RestMethod.t -> GapiJson.json_data_model list
  val parse :
    GapiDiscoveryV1Model.RestMethod.t ->
    GapiJson.json_data_model -> GapiDiscoveryV1Model.RestMethod.t
  val to_data_model :
    GapiDiscoveryV1Model.RestMethod.t -> GapiJson.json_data_model
  val of_data_model :
    GapiJson.json_data_model -> GapiDiscoveryV1Model.RestMethod.t
end