sig
  module Icons :
    sig
      type t = { x16 : string; x32 : string; }
      val x16 :
        (GapiDiscoveryV1Model.RestDescription.Icons.t, string) GapiLens.t
      val x32 :
        (GapiDiscoveryV1Model.RestDescription.Icons.t, string) GapiLens.t
      val empty : GapiDiscoveryV1Model.RestDescription.Icons.t
      val render :
        GapiDiscoveryV1Model.RestDescription.Icons.t ->
        GapiJson.json_data_model list
      val parse :
        GapiDiscoveryV1Model.RestDescription.Icons.t ->
        GapiJson.json_data_model ->
        GapiDiscoveryV1Model.RestDescription.Icons.t
    end
  module Auth :
    sig
      module Oauth2 :
        sig
          module Scopes :
            sig
              type t = { description : string; }
              val description :
                (GapiDiscoveryV1Model.RestDescription.Auth.Oauth2.Scopes.t,
                 string)
                GapiLens.t
              val empty :
                GapiDiscoveryV1Model.RestDescription.Auth.Oauth2.Scopes.t
              val render :
                GapiDiscoveryV1Model.RestDescription.Auth.Oauth2.Scopes.t ->
                GapiJson.json_data_model list
              val parse :
                GapiDiscoveryV1Model.RestDescription.Auth.Oauth2.Scopes.t ->
                GapiJson.json_data_model ->
                GapiDiscoveryV1Model.RestDescription.Auth.Oauth2.Scopes.t
            end
          type t = {
            scopes :
              (string *
               GapiDiscoveryV1Model.RestDescription.Auth.Oauth2.Scopes.t)
              list;
          }
          val scopes :
            (GapiDiscoveryV1Model.RestDescription.Auth.Oauth2.t,
             (string *
              GapiDiscoveryV1Model.RestDescription.Auth.Oauth2.Scopes.t)
             list)
            GapiLens.t
          val empty : GapiDiscoveryV1Model.RestDescription.Auth.Oauth2.t
          val render :
            GapiDiscoveryV1Model.RestDescription.Auth.Oauth2.t ->
            GapiJson.json_data_model list
          val parse :
            GapiDiscoveryV1Model.RestDescription.Auth.Oauth2.t ->
            GapiJson.json_data_model ->
            GapiDiscoveryV1Model.RestDescription.Auth.Oauth2.t
        end
      type t = {
        oauth2 : GapiDiscoveryV1Model.RestDescription.Auth.Oauth2.t;
      }
      val oauth2 :
        (GapiDiscoveryV1Model.RestDescription.Auth.t,
         GapiDiscoveryV1Model.RestDescription.Auth.Oauth2.t)
        GapiLens.t
      val empty : GapiDiscoveryV1Model.RestDescription.Auth.t
      val render :
        GapiDiscoveryV1Model.RestDescription.Auth.t ->
        GapiJson.json_data_model list
      val parse :
        GapiDiscoveryV1Model.RestDescription.Auth.t ->
        GapiJson.json_data_model ->
        GapiDiscoveryV1Model.RestDescription.Auth.t
    end
  type t = {
    auth : GapiDiscoveryV1Model.RestDescription.Auth.t;
    basePath : string;
    baseUrl : string;
    batchPath : string;
    canonicalName : string;
    description : string;
    discoveryVersion : string;
    documentationLink : string;
    etag : string;
    exponentialBackoffDefault : bool;
    features : string list;
    icons : GapiDiscoveryV1Model.RestDescription.Icons.t;
    id : string;
    kind : string;
    labels : string list;
    methods : (string * GapiDiscoveryV1Model.RestMethod.t) list;
    name : string;
    ownerDomain : string;
    ownerName : string;
    packagePath : string;
    parameters : (string * GapiDiscoveryV1Model.JsonSchema.t) list;
    protocol : string;
    resources : (string * GapiDiscoveryV1Model.RestResource.t) list;
    revision : string;
    rootUrl : string;
    schemas : (string * GapiDiscoveryV1Model.JsonSchema.t) list;
    servicePath : string;
    title : string;
    version : string;
    version_module : bool;
  }
  val auth :
    (GapiDiscoveryV1Model.RestDescription.t,
     GapiDiscoveryV1Model.RestDescription.Auth.t)
    GapiLens.t
  val basePath : (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val baseUrl : (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val batchPath : (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val canonicalName :
    (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val description :
    (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val discoveryVersion :
    (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val documentationLink :
    (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val etag : (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val exponentialBackoffDefault :
    (GapiDiscoveryV1Model.RestDescription.t, bool) GapiLens.t
  val features :
    (GapiDiscoveryV1Model.RestDescription.t, string list) GapiLens.t
  val icons :
    (GapiDiscoveryV1Model.RestDescription.t,
     GapiDiscoveryV1Model.RestDescription.Icons.t)
    GapiLens.t
  val id : (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val kind : (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val labels :
    (GapiDiscoveryV1Model.RestDescription.t, string list) GapiLens.t
  val methods :
    (GapiDiscoveryV1Model.RestDescription.t,
     (string * GapiDiscoveryV1Model.RestMethod.t) list)
    GapiLens.t
  val name : (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val ownerDomain :
    (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val ownerName : (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val packagePath :
    (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val parameters :
    (GapiDiscoveryV1Model.RestDescription.t,
     (string * GapiDiscoveryV1Model.JsonSchema.t) list)
    GapiLens.t
  val protocol : (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val resources :
    (GapiDiscoveryV1Model.RestDescription.t,
     (string * GapiDiscoveryV1Model.RestResource.t) list)
    GapiLens.t
  val revision : (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val rootUrl : (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val schemas :
    (GapiDiscoveryV1Model.RestDescription.t,
     (string * GapiDiscoveryV1Model.JsonSchema.t) list)
    GapiLens.t
  val servicePath :
    (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val title : (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val version : (GapiDiscoveryV1Model.RestDescription.t, string) GapiLens.t
  val version_module :
    (GapiDiscoveryV1Model.RestDescription.t, bool) GapiLens.t
  val empty : GapiDiscoveryV1Model.RestDescription.t
  val render :
    GapiDiscoveryV1Model.RestDescription.t -> GapiJson.json_data_model list
  val parse :
    GapiDiscoveryV1Model.RestDescription.t ->
    GapiJson.json_data_model -> GapiDiscoveryV1Model.RestDescription.t
  val to_data_model :
    GapiDiscoveryV1Model.RestDescription.t -> GapiJson.json_data_model
  val of_data_model :
    GapiJson.json_data_model -> GapiDiscoveryV1Model.RestDescription.t
end