# frozen_string_literal: true
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/rpc/error_details.proto

require 'google/protobuf'

require 'google/protobuf/duration_pb'


descriptor_data = "\n\x1egoogle/rpc/error_details.proto\x12\ngoogle.rpc\x1a\x1egoogle/protobuf/duration.proto\"\x93\x01\n\tErrorInfo\x12\x0e\n\x06reason\x18\x01 \x01(\t\x12\x0e\n\x06\x64omain\x18\x02 \x01(\t\x12\x35\n\x08metadata\x18\x03 \x03(\x0b\x32#.google.rpc.ErrorInfo.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\";\n\tRetryInfo\x12.\n\x0bretry_delay\x18\x01 \x01(\x0b\x32\x19.google.protobuf.Duration\"2\n\tDebugInfo\x12\x15\n\rstack_entries\x18\x01 \x03(\t\x12\x0e\n\x06\x64\x65tail\x18\x02 \x01(\t\"\x8f\x03\n\x0cQuotaFailure\x12\x36\n\nviolations\x18\x01 \x03(\x0b\x32\".google.rpc.QuotaFailure.Violation\x1a\xc6\x02\n\tViolation\x12\x0f\n\x07subject\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x13\n\x0b\x61pi_service\x18\x03 \x01(\t\x12\x14\n\x0cquota_metric\x18\x04 \x01(\t\x12\x10\n\x08quota_id\x18\x05 \x01(\t\x12Q\n\x10quota_dimensions\x18\x06 \x03(\x0b\x32\x37.google.rpc.QuotaFailure.Violation.QuotaDimensionsEntry\x12\x13\n\x0bquota_value\x18\x07 \x01(\x03\x12\x1f\n\x12\x66uture_quota_value\x18\x08 \x01(\x03H\x00\x88\x01\x01\x1a\x36\n\x14QuotaDimensionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x15\n\x13_future_quota_value\"\x95\x01\n\x13PreconditionFailure\x12=\n\nviolations\x18\x01 \x03(\x0b\x32).google.rpc.PreconditionFailure.Violation\x1a?\n\tViolation\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x0f\n\x07subject\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\"\xcc\x01\n\nBadRequest\x12?\n\x10\x66ield_violations\x18\x01 \x03(\x0b\x32%.google.rpc.BadRequest.FieldViolation\x1a}\n\x0e\x46ieldViolation\x12\r\n\x05\x66ield\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0e\n\x06reason\x18\x03 \x01(\t\x12\x37\n\x11localized_message\x18\x04 \x01(\x0b\x32\x1c.google.rpc.LocalizedMessage\"7\n\x0bRequestInfo\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x14\n\x0cserving_data\x18\x02 \x01(\t\"`\n\x0cResourceInfo\x12\x15\n\rresource_type\x18\x01 \x01(\t\x12\x15\n\rresource_name\x18\x02 \x01(\t\x12\r\n\x05owner\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\"V\n\x04Help\x12$\n\x05links\x18\x01 \x03(\x0b\x32\x15.google.rpc.Help.Link\x1a(\n\x04Link\x12\x13\n\x0b\x64\x65scription\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\"3\n\x10LocalizedMessage\x12\x0e\n\x06locale\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\tBl\n\x0e\x63om.google.rpcB\x11\x45rrorDetailsProtoP\x01Z?google.golang.org/genproto/googleapis/rpc/errdetails;errdetails\xa2\x02\x03RPCb\x06proto3"

pool = ::Google::Protobuf::DescriptorPool.generated_pool
pool.add_serialized_file(descriptor_data)

module Google
  module Rpc
    ErrorInfo = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.rpc.ErrorInfo").msgclass
    RetryInfo = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.rpc.RetryInfo").msgclass
    DebugInfo = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.rpc.DebugInfo").msgclass
    QuotaFailure = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.rpc.QuotaFailure").msgclass
    QuotaFailure::Violation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.rpc.QuotaFailure.Violation").msgclass
    PreconditionFailure = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.rpc.PreconditionFailure").msgclass
    PreconditionFailure::Violation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.rpc.PreconditionFailure.Violation").msgclass
    BadRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.rpc.BadRequest").msgclass
    BadRequest::FieldViolation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.rpc.BadRequest.FieldViolation").msgclass
    RequestInfo = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.rpc.RequestInfo").msgclass
    ResourceInfo = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.rpc.ResourceInfo").msgclass
    Help = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.rpc.Help").msgclass
    Help::Link = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.rpc.Help.Link").msgclass
    LocalizedMessage = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.rpc.LocalizedMessage").msgclass
  end
end

#### Source proto file: google/rpc/error_details.proto ####
#
# // Copyright 2026 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
# //
# //     http://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.
#
# syntax = "proto3";
#
# package google.rpc;
#
# import "google/protobuf/duration.proto";
#
# option go_package = "google.golang.org/genproto/googleapis/rpc/errdetails;errdetails";
# option java_multiple_files = true;
# option java_outer_classname = "ErrorDetailsProto";
# option java_package = "com.google.rpc";
# option objc_class_prefix = "RPC";
#
# // Describes the cause of the error with structured details.
# //
# // Example of an error when contacting the "pubsub.googleapis.com" API when it
# // is not enabled:
# //
# //     { "reason": "API_DISABLED"
# //       "domain": "googleapis.com"
# //       "metadata": {
# //         "resource": "projects/123",
# //         "service": "pubsub.googleapis.com"
# //       }
# //     }
# //
# // This response indicates that the pubsub.googleapis.com API is not enabled.
# //
# // Example of an error that is returned when attempting to create a Spanner
# // instance in a region that is out of stock:
# //
# //     { "reason": "STOCKOUT"
# //       "domain": "spanner.googleapis.com",
# //       "metadata": {
# //         "availableRegions": "us-central1,us-east2"
# //       }
# //     }
# message ErrorInfo {
#   // The reason of the error. This is a constant value that identifies the
#   // proximate cause of the error. Error reasons are unique within a particular
#   // domain of errors. This should be at most 63 characters and match a
#   // regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`, which represents
#   // UPPER_SNAKE_CASE.
#   string reason = 1;
#
#   // The logical grouping to which the "reason" belongs. The error domain
#   // is typically the registered service name of the tool or product that
#   // generates the error. Example: "pubsub.googleapis.com". If the error is
#   // generated by some common infrastructure, the error domain must be a
#   // globally unique value that identifies the infrastructure. For Google API
#   // infrastructure, the error domain is "googleapis.com".
#   string domain = 2;
#
#   // Additional structured details about this error.
#   //
#   // Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
#   // ideally be lowerCamelCase. Also, they must be limited to 64 characters in
#   // length. When identifying the current value of an exceeded limit, the units
#   // should be contained in the key, not the value.  For example, rather than
#   // `{"instanceLimit": "100/request"}`, should be returned as,
#   // `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
#   // instances that can be created in a single (batch) request.
#   map<string, string> metadata = 3;
# }
#
# // Describes when the clients can retry a failed request. Clients could ignore
# // the recommendation here or retry when this information is missing from error
# // responses.
# //
# // It's always recommended that clients should use exponential backoff when
# // retrying.
# //
# // Clients should wait until `retry_delay` amount of time has passed since
# // receiving the error response before retrying.  If retrying requests also
# // fail, clients should use an exponential backoff scheme to gradually increase
# // the delay between retries based on `retry_delay`, until either a maximum
# // number of retries have been reached or a maximum retry delay cap has been
# // reached.
# message RetryInfo {
#   // Clients should wait at least this long between retrying the same request.
#   google.protobuf.Duration retry_delay = 1;
# }
#
# // Describes additional debugging info.
# message DebugInfo {
#   // The stack trace entries indicating where the error occurred.
#   repeated string stack_entries = 1;
#
#   // Additional debugging information provided by the server.
#   string detail = 2;
# }
#
# // Describes how a quota check failed.
# //
# // For example if a daily limit was exceeded for the calling project,
# // a service could respond with a QuotaFailure detail containing the project
# // id and the description of the quota limit that was exceeded.  If the
# // calling project hasn't enabled the service in the developer console, then
# // a service could respond with the project id and set `service_disabled`
# // to true.
# //
# // Also see RetryInfo and Help types for other details about handling a
# // quota failure.
# message QuotaFailure {
#   // A message type used to describe a single quota violation.  For example, a
#   // daily quota or a custom quota that was exceeded.
#   message Violation {
#     // The subject on which the quota check failed.
#     // For example, "clientip:<ip address of client>" or "project:<Google
#     // developer project id>".
#     string subject = 1;
#
#     // A description of how the quota check failed. Clients can use this
#     // description to find more about the quota configuration in the service's
#     // public documentation, or find the relevant quota limit to adjust through
#     // developer console.
#     //
#     // For example: "Service disabled" or "Daily Limit for read operations
#     // exceeded".
#     string description = 2;
#
#     // The API Service from which the `QuotaFailure.Violation` orginates. In
#     // some cases, Quota issues originate from an API Service other than the one
#     // that was called. In other words, a dependency of the called API Service
#     // could be the cause of the `QuotaFailure`, and this field would have the
#     // dependency API service name.
#     //
#     // For example, if the called API is Kubernetes Engine API
#     // (container.googleapis.com), and a quota violation occurs in the
#     // Kubernetes Engine API itself, this field would be
#     // "container.googleapis.com". On the other hand, if the quota violation
#     // occurs when the Kubernetes Engine API creates VMs in the Compute Engine
#     // API (compute.googleapis.com), this field would be
#     // "compute.googleapis.com".
#     string api_service = 3;
#
#     // The metric of the violated quota. A quota metric is a named counter to
#     // measure usage, such as API requests or CPUs. When an activity occurs in a
#     // service, such as Virtual Machine allocation, one or more quota metrics
#     // may be affected.
#     //
#     // For example, "compute.googleapis.com/cpus_per_vm_family",
#     // "storage.googleapis.com/internet_egress_bandwidth".
#     string quota_metric = 4;
#
#     // The id of the violated quota. Also know as "limit name", this is the
#     // unique identifier of a quota in the context of an API service.
#     //
#     // For example, "CPUS-PER-VM-FAMILY-per-project-region".
#     string quota_id = 5;
#
#     // The dimensions of the violated quota. Every non-global quota is enforced
#     // on a set of dimensions. While quota metric defines what to count, the
#     // dimensions specify for what aspects the counter should be increased.
#     //
#     // For example, the quota "CPUs per region per VM family" enforces a limit
#     // on the metric "compute.googleapis.com/cpus_per_vm_family" on dimensions
#     // "region" and "vm_family". And if the violation occurred in region
#     // "us-central1" and for VM family "n1", the quota_dimensions would be,
#     //
#     // {
#     //   "region": "us-central1",
#     //   "vm_family": "n1",
#     // }
#     //
#     // When a quota is enforced globally, the quota_dimensions would always be
#     // empty.
#     map<string, string> quota_dimensions = 6;
#
#     // The enforced quota value at the time of the `QuotaFailure`.
#     //
#     // For example, if the enforced quota value at the time of the
#     // `QuotaFailure` on the number of CPUs is "10", then the value of this
#     // field would reflect this quantity.
#     int64 quota_value = 7;
#
#     // The new quota value being rolled out at the time of the violation. At the
#     // completion of the rollout, this value will be enforced in place of
#     // quota_value. If no rollout is in progress at the time of the violation,
#     // this field is not set.
#     //
#     // For example, if at the time of the violation a rollout is in progress
#     // changing the number of CPUs quota from 10 to 20, 20 would be the value of
#     // this field.
#     optional int64 future_quota_value = 8;
#   }
#
#   // Describes all quota violations.
#   repeated Violation violations = 1;
# }
#
# // Describes what preconditions have failed.
# //
# // For example, if an RPC failed because it required the Terms of Service to be
# // acknowledged, it could list the terms of service violation in the
# // PreconditionFailure message.
# message PreconditionFailure {
#   // A message type used to describe a single precondition failure.
#   message Violation {
#     // The type of PreconditionFailure. We recommend using a service-specific
#     // enum type to define the supported precondition violation subjects. For
#     // example, "TOS" for "Terms of Service violation".
#     string type = 1;
#
#     // The subject, relative to the type, that failed.
#     // For example, "google.com/cloud" relative to the "TOS" type would indicate
#     // which terms of service is being referenced.
#     string subject = 2;
#
#     // A description of how the precondition failed. Developers can use this
#     // description to understand how to fix the failure.
#     //
#     // For example: "Terms of service not accepted".
#     string description = 3;
#   }
#
#   // Describes all precondition violations.
#   repeated Violation violations = 1;
# }
#
# // Describes violations in a client request. This error type focuses on the
# // syntactic aspects of the request.
# message BadRequest {
#   // A message type used to describe a single bad request field.
#   message FieldViolation {
#     // A path that leads to a field in the request body. The value will be a
#     // sequence of dot-separated identifiers that identify a protocol buffer
#     // field.
#     //
#     // Consider the following:
#     //
#     //     message CreateContactRequest {
#     //       message EmailAddress {
#     //         enum Type {
#     //           TYPE_UNSPECIFIED = 0;
#     //           HOME = 1;
#     //           WORK = 2;
#     //         }
#     //
#     //         optional string email = 1;
#     //         repeated EmailType type = 2;
#     //       }
#     //
#     //       string full_name = 1;
#     //       repeated EmailAddress email_addresses = 2;
#     //     }
#     //
#     // In this example, in proto `field` could take one of the following values:
#     //
#     // * `full_name` for a violation in the `full_name` value
#     // * `email_addresses[0].email` for a violation in the `email` field of the
#     //   first `email_addresses` message
#     // * `email_addresses[2].type[1]` for a violation in the second `type`
#     //   value in the third `email_addresses` message.
#     //
#     // In JSON, the same values are represented as:
#     //
#     // * `fullName` for a violation in the `fullName` value
#     // * `emailAddresses[0].email` for a violation in the `email` field of the
#     //   first `emailAddresses` message
#     // * `emailAddresses[2].type[1]` for a violation in the second `type`
#     //   value in the third `emailAddresses` message.
#     string field = 1;
#
#     // A description of why the request element is bad.
#     string description = 2;
#
#     // The reason of the field-level error. This is a constant value that
#     // identifies the proximate cause of the field-level error. It should
#     // uniquely identify the type of the FieldViolation within the scope of the
#     // google.rpc.ErrorInfo.domain. This should be at most 63
#     // characters and match a regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`,
#     // which represents UPPER_SNAKE_CASE.
#     string reason = 3;
#
#     // Provides a localized error message for field-level errors that is safe to
#     // return to the API consumer.
#     LocalizedMessage localized_message = 4;
#   }
#
#   // Describes all violations in a client request.
#   repeated FieldViolation field_violations = 1;
# }
#
# // Contains metadata about the request that clients can attach when filing a bug
# // or providing other forms of feedback.
# message RequestInfo {
#   // An opaque string that should only be interpreted by the service generating
#   // it. For example, it can be used to identify requests in the service's logs.
#   string request_id = 1;
#
#   // Any data that was used to serve this request. For example, an encrypted
#   // stack trace that can be sent back to the service provider for debugging.
#   string serving_data = 2;
# }
#
# // Describes the resource that is being accessed.
# message ResourceInfo {
#   // A name for the type of resource being accessed, e.g. "sql table",
#   // "cloud storage bucket", "file", "Google calendar"; or the type URL
#   // of the resource: e.g. "type.googleapis.com/google.pubsub.v1.Topic".
#   string resource_type = 1;
#
#   // The name of the resource being accessed.  For example, a shared calendar
#   // name: "example.com_4fghdhgsrgh@group.calendar.google.com", if the current
#   // error is
#   // [google.rpc.Code.PERMISSION_DENIED][google.rpc.Code.PERMISSION_DENIED].
#   string resource_name = 2;
#
#   // The owner of the resource (optional).
#   // For example, "user:<owner email>" or "project:<Google developer project
#   // id>".
#   string owner = 3;
#
#   // Describes what error is encountered when accessing this resource.
#   // For example, updating a cloud project may require the `writer` permission
#   // on the developer console project.
#   string description = 4;
# }
#
# // Provides links to documentation or for performing an out of band action.
# //
# // For example, if a quota check failed with an error indicating the calling
# // project hasn't enabled the accessed service, this can contain a URL pointing
# // directly to the right place in the developer console to flip the bit.
# message Help {
#   // Describes a URL link.
#   message Link {
#     // Describes what the link offers.
#     string description = 1;
#
#     // The URL of the link.
#     string url = 2;
#   }
#
#   // URL(s) pointing to additional information on handling the current error.
#   repeated Link links = 1;
# }
#
# // Provides a localized error message that is safe to return to the user
# // which can be attached to an RPC error.
# message LocalizedMessage {
#   // The locale used following the specification defined at
#   // https://www.rfc-editor.org/rfc/bcp/bcp47.txt.
#   // Examples are: "en-US", "fr-CH", "es-MX"
#   string locale = 1;
#
#   // The localized error message in the above locale.
#   string message = 2;
# }
