// Copyright 2023 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Generated by the C++ microgenerator.
// If you make any local changes, they will be lost.
// file:///workspace/generator/discovery/compute_public_google_rest_v1.json
// revision: 20231110

syntax = "proto3";

package google.cloud.cpp.compute.v1;

// Represents a Cloud Storage Bucket resource. This Cloud Storage bucket
// resource is referenced by a URL map of a load balancer. For more information,
// read Backend Buckets.
message BackendBucket {
  // Cloud Storage bucket name.
  optional string bucket_name = 1 [json_name = "bucketName"];

  // Cloud CDN configuration for this BackendBucket.
  optional BackendBucketCdnPolicy cdn_policy = 2 [json_name = "cdnPolicy"];

  // Compress text responses using Brotli or gzip compression, based on the
  // client's Accept-Encoding header.
  // AUTOMATIC: Automatically uses the best compression based on the
  // Accept-Encoding header sent by the client.
  // DISABLED: Disables compression. Existing compressed responses cached by
  // Cloud CDN will not be served to clients.
  optional string compression_mode = 3 [json_name = "compressionMode"];

  // [Output Only] Creation timestamp in RFC3339 text format.
  optional string creation_timestamp = 4 [json_name = "creationTimestamp"];

  // Headers that the Application Load Balancer should add to proxied responses.
  repeated string custom_response_headers = 5
      [json_name = "customResponseHeaders"];

  // An optional textual description of the resource; provided by the client
  // when the resource is created.
  optional string description = 6 [json_name = "description"];

  // [Output Only] The resource URL for the edge security policy associated with
  // this backend bucket.
  optional string edge_security_policy = 7 [json_name = "edgeSecurityPolicy"];

  // If true, enable Cloud CDN for this BackendBucket.
  optional bool enable_cdn = 8 [json_name = "enableCdn"];

  // [Output Only] Unique identifier for the resource; defined by the server.
  optional string id = 9 [json_name = "id"];

  // Type of the resource.
  optional string kind = 10 [json_name = "kind"];

  // Name of the resource. Provided by the client when the resource is created.
  // The name must be 1-63 characters long, and comply with RFC1035.
  // Specifically, the name must be 1-63 characters long and match the regular
  // expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character
  // must be a lowercase letter, and all following characters must be a dash,
  // lowercase letter, or digit, except the last character, which cannot be a
  // dash.
  optional string name = 11 [json_name = "name"];

  // [Output Only] Server-defined URL for the resource.
  optional string self_link = 12 [json_name = "selfLink"];
}

// Message containing Cloud CDN configuration for a backend bucket.
message BackendBucketCdnPolicy {
  // Bypass the cache when the specified request headers are matched - e.g.
  // Pragma or Authorization headers. Up to 5 headers can be specified. The
  // cache is bypassed for all cdnPolicy.cacheMode settings.
  repeated BackendBucketCdnPolicyBypassCacheOnRequestHeader
      bypass_cache_on_request_headers = 1
      [json_name = "bypassCacheOnRequestHeaders"];

  // The CacheKeyPolicy for this CdnPolicy.
  optional BackendBucketCdnPolicyCacheKeyPolicy cache_key_policy = 2
      [json_name = "cacheKeyPolicy"];

  // Specifies the cache setting for all responses from this backend. The
  // possible values are: USE_ORIGIN_HEADERS Requires the origin to set valid
  // caching headers to cache content. Responses without these headers will not
  // be cached at Google's edge, and will require a full trip to the origin on
  // every request, potentially impacting performance and increasing load on the
  // origin server. FORCE_CACHE_ALL Cache all content, ignoring any "private",
  // "no-store" or "no-cache" directives in Cache-Control response headers.
  // Warning: this may result in Cloud CDN caching private, per-user (user
  // identifiable) content. CACHE_ALL_STATIC Automatically cache static content,
  // including common image formats, media (video and audio), and web assets
  // (JavaScript and CSS). Requests and responses that are marked as
  // uncacheable, as well as dynamic content (including HTML), will not be
  // cached.
  // CACHE_ALL_STATIC: Automatically cache static content, including common
  // image formats, media (video and audio), and web assets (JavaScript and
  // CSS). Requests and responses that are marked as uncacheable, as well as
  // dynamic content (including HTML), will not be cached.
  // FORCE_CACHE_ALL: Cache all content, ignoring any "private", "no-store" or
  // "no-cache" directives in Cache-Control response headers. Warning: this may
  // result in Cloud CDN caching private, per-user (user identifiable) content.
  // INVALID_CACHE_MODE:
  // USE_ORIGIN_HEADERS: Requires the origin to set valid caching headers to
  // cache content. Responses without these headers will not be cached at
  // Google's edge, and will require a full trip to the origin on every request,
  // potentially impacting performance and increasing load on the origin server.
  optional string cache_mode = 3 [json_name = "cacheMode"];

  // Specifies a separate client (e.g. browser client) maximum TTL. This is used
  // to clamp the max-age (or Expires) value sent to the client. With
  // FORCE_CACHE_ALL, the lesser of client_ttl and default_ttl is used for the
  // response max-age directive, along with a "public" directive. For cacheable
  // content in CACHE_ALL_STATIC mode, client_ttl clamps the max-age from the
  // origin (if specified), or else sets the response max-age directive to the
  // lesser of the client_ttl and default_ttl, and also ensures a "public"
  // cache-control directive is present. If a client TTL is not specified, a
  // default value (1 hour) will be used. The maximum allowed value is
  // 31,622,400s (1 year).
  optional int32 client_ttl = 4 [json_name = "clientTtl"];

  // Specifies the default TTL for cached content served by this origin for
  // responses that do not have an existing valid TTL (max-age or s-max-age).
  // Setting a TTL of "0" means "always revalidate". The value of defaultTTL
  // cannot be set to a value greater than that of maxTTL, but can be equal.
  // When the cacheMode is set to FORCE_CACHE_ALL, the defaultTTL will overwrite
  // the TTL set in all responses. The maximum allowed value is 31,622,400s (1
  // year), noting that infrequently accessed objects may be evicted from the
  // cache before the defined TTL.
  optional int32 default_ttl = 5 [json_name = "defaultTtl"];

  // Specifies the maximum allowed TTL for cached content served by this origin.
  // Cache directives that attempt to set a max-age or s-maxage higher than
  // this, or an Expires header more than maxTTL seconds in the future will be
  // capped at the value of maxTTL, as if it were the value of an s-maxage
  // Cache-Control directive. Headers sent to the client will not be modified.
  // Setting a TTL of "0" means "always revalidate". The maximum allowed value
  // is 31,622,400s (1 year), noting that infrequently accessed objects may be
  // evicted from the cache before the defined TTL.
  optional int32 max_ttl = 6 [json_name = "maxTtl"];

  // Negative caching allows per-status code TTLs to be set, in order to apply
  // fine-grained caching for common errors or redirects. This can reduce the
  // load on your origin and improve end-user experience by reducing response
  // latency. When the cache mode is set to CACHE_ALL_STATIC or
  // USE_ORIGIN_HEADERS, negative caching applies to responses with the
  // specified response code that lack any Cache-Control, Expires, or Pragma:
  // no-cache directives. When the cache mode is set to FORCE_CACHE_ALL,
  // negative caching applies to all responses with the specified response code,
  // and override any caching headers. By default, Cloud CDN will apply the
  // following default TTLs to these status codes: HTTP 300 (Multiple Choice),
  // 301, 308 (Permanent Redirects): 10m HTTP 404 (Not Found), 410 (Gone), 451
  // (Unavailable For Legal Reasons): 120s HTTP 405 (Method Not Found), 421
  // (Misdirected Request), 501 (Not Implemented): 60s. These defaults can be
  // overridden in negative_caching_policy.
  optional bool negative_caching = 7 [json_name = "negativeCaching"];

  // Sets a cache TTL for the specified HTTP status code. negative_caching must
  // be enabled to configure negative_caching_policy. Omitting the policy and
  // leaving negative_caching enabled will use Cloud CDN's default cache TTLs.
  // Note that when specifying an explicit negative_caching_policy, you should
  // take care to specify a cache TTL for all response codes that you wish to
  // cache. Cloud CDN will not apply any default negative caching when a policy
  // exists.
  repeated BackendBucketCdnPolicyNegativeCachingPolicy negative_caching_policy =
      8 [json_name = "negativeCachingPolicy"];

  // If true then Cloud CDN will combine multiple concurrent cache fill requests
  // into a small number of requests to the origin.
  optional bool request_coalescing = 9 [json_name = "requestCoalescing"];

  // Serve existing content from the cache (if available) when revalidating
  // content with the origin, or when an error is encountered when refreshing
  // the cache. This setting defines the default "max-stale" duration for any
  // cached responses that do not specify a max-stale directive. Stale responses
  // that exceed the TTL configured here will not be served. The default limit
  // (max-stale) is 86400s (1 day), which will allow stale content to be served
  // up to this limit beyond the max-age (or s-max-age) of a cached response.
  // The maximum allowed value is 604800 (1 week). Set this to zero (0) to
  // disable serve-while-stale.
  optional int32 serve_while_stale = 10 [json_name = "serveWhileStale"];

  // Maximum number of seconds the response to a signed URL request will be
  // considered fresh. After this time period, the response will be revalidated
  // before being served. Defaults to 1hr (3600s). When serving responses to
  // signed URL requests, Cloud CDN will internally behave as though all
  // responses from this backend had a "Cache-Control: public, max-age=[TTL]"
  // header, regardless of any existing Cache-Control header. The actual headers
  // served in responses will not be altered.
  optional string signed_url_cache_max_age_sec = 11
      [json_name = "signedUrlCacheMaxAgeSec"];

  // [Output Only] Names of the keys for signing request URLs.
  repeated string signed_url_key_names = 12 [json_name = "signedUrlKeyNames"];
}

// Bypass the cache when the specified request headers are present, e.g. Pragma
// or Authorization headers. Values are case insensitive. The presence of such a
// header overrides the cache_mode setting.
message BackendBucketCdnPolicyBypassCacheOnRequestHeader {
  // The header field name to match on when bypassing cache. Values are
  // case-insensitive.
  optional string header_name = 1 [json_name = "headerName"];
}

// Message containing what to include in the cache key for a request for Cloud
// CDN.
message BackendBucketCdnPolicyCacheKeyPolicy {
  // Allows HTTP request headers (by name) to be used in the cache key.
  repeated string include_http_headers = 1 [json_name = "includeHttpHeaders"];

  // Names of query string parameters to include in cache keys. Default
  // parameters are always included. '&' and '=' will be percent encoded and not
  // treated as delimiters.
  repeated string query_string_whitelist = 2
      [json_name = "queryStringWhitelist"];
}

// Specify CDN TTLs for response error codes.
message BackendBucketCdnPolicyNegativeCachingPolicy {
  // The HTTP status code to define a TTL against. Only HTTP status codes 300,
  // 301, 302, 307, 308, 404, 405, 410, 421, 451 and 501 are can be specified as
  // values, and you cannot specify a status code more than once.
  optional int32 code = 1 [json_name = "code"];

  // The TTL (in seconds) for which to cache responses with the corresponding
  // status code. The maximum allowed value is 1800s (30 minutes), noting that
  // infrequently accessed objects may be evicted from the cache before the
  // defined TTL.
  optional int32 ttl = 2 [json_name = "ttl"];
}

// Contains a list of BackendBucket resources.
message BackendBucketList {
  // [Output Only] Unique identifier for the resource; defined by the server.
  optional string id = 1 [json_name = "id"];

  // A list of BackendBucket resources.
  repeated BackendBucket items = 2 [json_name = "items"];

  // Type of resource.
  optional string kind = 3 [json_name = "kind"];

  // [Output Only] This token allows you to get the next page of results for
  // list requests. If the number of results is larger than maxResults, use the
  // nextPageToken as a value for the query parameter pageToken in the next list
  // request. Subsequent list requests will have their own nextPageToken to
  // continue paging through the results.
  optional string next_page_token = 4 [json_name = "nextPageToken"];

  // [Output Only] Server-defined URL for this resource.
  optional string self_link = 5 [json_name = "selfLink"];

  message Warning {
    // [Output Only] A warning code, if applicable. For example, Compute Engine
    // returns NO_RESULTS_ON_PAGE if there are no results in the response.
    // CLEANUP_FAILED: Warning about failed cleanup of transient changes made by
    // a failed operation.
    // DEPRECATED_RESOURCE_USED: A link to a deprecated resource was created.
    // DEPRECATED_TYPE_USED: When deploying and at least one of the resources
    // has a type marked as deprecated
    // DISK_SIZE_LARGER_THAN_IMAGE_SIZE: The user created a boot disk that is
    // larger than image size.
    // EXPERIMENTAL_TYPE_USED: When deploying and at least one of the resources
    // has a type marked as experimental
    // EXTERNAL_API_WARNING: Warning that is present in an external api call
    // FIELD_VALUE_OVERRIDEN: Warning that value of a field has been overridden.
    // Deprecated unused field.
    // INJECTED_KERNELS_DEPRECATED: The operation involved use of an injected
    // kernel, which is deprecated.
    // INVALID_HEALTH_CHECK_FOR_DYNAMIC_WIEGHTED_LB: A WEIGHTED_MAGLEV backend
    // service is associated with a health check that is not of type
    // HTTP/HTTPS/HTTP2.
    // LARGE_DEPLOYMENT_WARNING: When deploying a deployment with a exceedingly
    // large number of resources
    // LIST_OVERHEAD_QUOTA_EXCEED: Resource can't be retrieved due to list
    // overhead quota exceed which captures the amount of resources filtered out
    // by user-defined list filter.
    // MISSING_TYPE_DEPENDENCY: A resource depends on a missing type
    // NEXT_HOP_ADDRESS_NOT_ASSIGNED: The route's nextHopIp address is not
    // assigned to an instance on the network.
    // NEXT_HOP_CANNOT_IP_FORWARD: The route's next hop instance cannot ip
    // forward.
    // NEXT_HOP_INSTANCE_HAS_NO_IPV6_INTERFACE: The route's nextHopInstance URL
    // refers to an instance that does not have an ipv6 interface on the same
    // network as the route.
    // NEXT_HOP_INSTANCE_NOT_FOUND: The route's nextHopInstance URL refers to an
    // instance that does not exist.
    // NEXT_HOP_INSTANCE_NOT_ON_NETWORK: The route's nextHopInstance URL refers
    // to an instance that is not on the same network as the route.
    // NEXT_HOP_NOT_RUNNING: The route's next hop instance does not have a
    // status of RUNNING.
    // NOT_CRITICAL_ERROR: Error which is not critical. We decided to continue
    // the process despite the mentioned error.
    // NO_RESULTS_ON_PAGE: No results are present on a particular list page.
    // PARTIAL_SUCCESS: Success is reported, but some results may be missing due
    // to errors
    // REQUIRED_TOS_AGREEMENT: The user attempted to use a resource that
    // requires a TOS they have not accepted.
    // RESOURCE_IN_USE_BY_OTHER_RESOURCE_WARNING: Warning that a resource is in
    // use.
    // RESOURCE_NOT_DELETED: One or more of the resources set to auto-delete
    // could not be deleted because they were in use.
    // SCHEMA_VALIDATION_IGNORED: When a resource schema validation is ignored.
    // SINGLE_INSTANCE_PROPERTY_TEMPLATE: Instance template used in instance
    // group manager is valid as such, but its application does not make a lot
    // of sense, because it allows only single instance in instance group.
    // UNDECLARED_PROPERTIES: When undeclared properties in the schema are
    // present
    // UNREACHABLE: A given scope cannot be reached.
    optional string code = 1 [json_name = "code"];

    message DataItem {
      // [Output Only] A key that provides more detail on the warning being
      // returned. For example, for warnings where there are no results in a
      // list request for a particular zone, this key might be scope and the key
      // value might be the zone name. Other examples might be a key indicating
      // a deprecated resource and a suggested replacement, or a warning about
      // invalid network settings (for example, if an instance attempts to
      // perform IP forwarding but is not enabled for IP forwarding).
      optional string key = 1 [json_name = "key"];

      // [Output Only] A warning data value corresponding to the key.
      optional string value = 2 [json_name = "value"];
    }

    // [Output Only] Metadata about this warning in key: value format. For
    // example: "data": [ { "key": "scope", "value": "zones/us-east1-d" }
    repeated DataItem data = 2 [json_name = "data"];

    // [Output Only] A human-readable description of the warning code.
    optional string message = 3 [json_name = "message"];
  }

  // [Output Only] Informational warning message.
  optional Warning warning = 6 [json_name = "warning"];
}
