import type { BinaryWriteOptions } from '@protobuf-ts/runtime';
import type { IBinaryWriter } from '@protobuf-ts/runtime';
import type { BinaryReadOptions } from '@protobuf-ts/runtime';
import type { IBinaryReader } from '@protobuf-ts/runtime';
import type { PartialMessage } from '@protobuf-ts/runtime';
import { MessageType } from '@protobuf-ts/runtime';
import { Duration } from '../protobuf/duration.js';
/**
 * 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"
 *       }
 *     }
 *
 * @generated from protobuf message google.rpc.ErrorInfo
 */
export interface 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.
     *
     * @generated from protobuf field: string reason = 1
     */
    reason: string;
    /**
     * 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".
     *
     * @generated from protobuf field: string domain = 2
     */
    domain: string;
    /**
     * Additional structured details about this error.
     *
     * Keys should match /[a-zA-Z0-9-_]/ and 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.
     *
     * @generated from protobuf field: map<string, string> metadata = 3
     */
    metadata: {
        [key: string]: string;
    };
}
/**
 * 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.
 *
 * @generated from protobuf message google.rpc.RetryInfo
 */
export interface RetryInfo {
    /**
     * Clients should wait at least this long between retrying the same request.
     *
     * @generated from protobuf field: google.protobuf.Duration retry_delay = 1
     */
    retryDelay?: Duration;
}
/**
 * Describes additional debugging info.
 *
 * @generated from protobuf message google.rpc.DebugInfo
 */
export interface DebugInfo {
    /**
     * The stack trace entries indicating where the error occurred.
     *
     * @generated from protobuf field: repeated string stack_entries = 1
     */
    stackEntries: string[];
    /**
     * Additional debugging information provided by the server.
     *
     * @generated from protobuf field: string detail = 2
     */
    detail: string;
}
/**
 * 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.
 *
 * @generated from protobuf message google.rpc.QuotaFailure
 */
export interface QuotaFailure {
    /**
     * Describes all quota violations.
     *
     * @generated from protobuf field: repeated google.rpc.QuotaFailure.Violation violations = 1
     */
    violations: QuotaFailure_Violation[];
}
/**
 * A message type used to describe a single quota violation.  For example, a
 * daily quota or a custom quota that was exceeded.
 *
 * @generated from protobuf message google.rpc.QuotaFailure.Violation
 */
export interface QuotaFailure_Violation {
    /**
     * The subject on which the quota check failed.
     * For example, "clientip:<ip address of client>" or "project:<Google
     * developer project id>".
     *
     * @generated from protobuf field: string subject = 1
     */
    subject: string;
    /**
     * 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".
     *
     * @generated from protobuf field: string description = 2
     */
    description: string;
}
/**
 * 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.
 *
 * @generated from protobuf message google.rpc.PreconditionFailure
 */
export interface PreconditionFailure {
    /**
     * Describes all precondition violations.
     *
     * @generated from protobuf field: repeated google.rpc.PreconditionFailure.Violation violations = 1
     */
    violations: PreconditionFailure_Violation[];
}
/**
 * A message type used to describe a single precondition failure.
 *
 * @generated from protobuf message google.rpc.PreconditionFailure.Violation
 */
export interface PreconditionFailure_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".
     *
     * @generated from protobuf field: string type = 1
     */
    type: string;
    /**
     * 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.
     *
     * @generated from protobuf field: string subject = 2
     */
    subject: string;
    /**
     * 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".
     *
     * @generated from protobuf field: string description = 3
     */
    description: string;
}
/**
 * Describes violations in a client request. This error type focuses on the
 * syntactic aspects of the request.
 *
 * @generated from protobuf message google.rpc.BadRequest
 */
export interface BadRequest {
    /**
     * Describes all violations in a client request.
     *
     * @generated from protobuf field: repeated google.rpc.BadRequest.FieldViolation field_violations = 1
     */
    fieldViolations: BadRequest_FieldViolation[];
}
/**
 * A message type used to describe a single bad request field.
 *
 * @generated from protobuf message google.rpc.BadRequest.FieldViolation
 */
export interface BadRequest_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[1].email` for a violation in the `email` field of the
     *   first `email_addresses` message
     * * `email_addresses[3].type[2]` 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[1].email` for a violation in the `email` field of the
     *   first `emailAddresses` message
     * * `emailAddresses[3].type[2]` for a violation in the second `type`
     *   value in the third `emailAddresses` message.
     *
     * @generated from protobuf field: string field = 1
     */
    field: string;
    /**
     * A description of why the request element is bad.
     *
     * @generated from protobuf field: string description = 2
     */
    description: string;
}
/**
 * Contains metadata about the request that clients can attach when filing a bug
 * or providing other forms of feedback.
 *
 * @generated from protobuf message google.rpc.RequestInfo
 */
export interface 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.
     *
     * @generated from protobuf field: string request_id = 1
     */
    requestId: string;
    /**
     * 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.
     *
     * @generated from protobuf field: string serving_data = 2
     */
    servingData: string;
}
/**
 * Describes the resource that is being accessed.
 *
 * @generated from protobuf message google.rpc.ResourceInfo
 */
export interface 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".
     *
     * @generated from protobuf field: string resource_type = 1
     */
    resourceType: string;
    /**
     * 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].
     *
     * @generated from protobuf field: string resource_name = 2
     */
    resourceName: string;
    /**
     * The owner of the resource (optional).
     * For example, "user:<owner email>" or "project:<Google developer project
     * id>".
     *
     * @generated from protobuf field: string owner = 3
     */
    owner: string;
    /**
     * 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.
     *
     * @generated from protobuf field: string description = 4
     */
    description: string;
}
/**
 * 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.
 *
 * @generated from protobuf message google.rpc.Help
 */
export interface Help {
    /**
     * URL(s) pointing to additional information on handling the current error.
     *
     * @generated from protobuf field: repeated google.rpc.Help.Link links = 1
     */
    links: Help_Link[];
}
/**
 * Describes a URL link.
 *
 * @generated from protobuf message google.rpc.Help.Link
 */
export interface Help_Link {
    /**
     * Describes what the link offers.
     *
     * @generated from protobuf field: string description = 1
     */
    description: string;
    /**
     * The URL of the link.
     *
     * @generated from protobuf field: string url = 2
     */
    url: string;
}
/**
 * Provides a localized error message that is safe to return to the user
 * which can be attached to an RPC error.
 *
 * @generated from protobuf message google.rpc.LocalizedMessage
 */
export interface 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"
     *
     * @generated from protobuf field: string locale = 1
     */
    locale: string;
    /**
     * The localized error message in the above locale.
     *
     * @generated from protobuf field: string message = 2
     */
    message: string;
}
declare class ErrorInfo$Type extends MessageType<ErrorInfo> {
    constructor();
    create(value?: PartialMessage<ErrorInfo>): ErrorInfo;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ErrorInfo): ErrorInfo;
    private binaryReadMap3;
    internalBinaryWrite(message: ErrorInfo, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.rpc.ErrorInfo
 */
export declare const ErrorInfo: ErrorInfo$Type;
declare class RetryInfo$Type extends MessageType<RetryInfo> {
    constructor();
    create(value?: PartialMessage<RetryInfo>): RetryInfo;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RetryInfo): RetryInfo;
    internalBinaryWrite(message: RetryInfo, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.rpc.RetryInfo
 */
export declare const RetryInfo: RetryInfo$Type;
declare class DebugInfo$Type extends MessageType<DebugInfo> {
    constructor();
    create(value?: PartialMessage<DebugInfo>): DebugInfo;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DebugInfo): DebugInfo;
    internalBinaryWrite(message: DebugInfo, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.rpc.DebugInfo
 */
export declare const DebugInfo: DebugInfo$Type;
declare class QuotaFailure$Type extends MessageType<QuotaFailure> {
    constructor();
    create(value?: PartialMessage<QuotaFailure>): QuotaFailure;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: QuotaFailure): QuotaFailure;
    internalBinaryWrite(message: QuotaFailure, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.rpc.QuotaFailure
 */
export declare const QuotaFailure: QuotaFailure$Type;
declare class QuotaFailure_Violation$Type extends MessageType<QuotaFailure_Violation> {
    constructor();
    create(value?: PartialMessage<QuotaFailure_Violation>): QuotaFailure_Violation;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: QuotaFailure_Violation): QuotaFailure_Violation;
    internalBinaryWrite(message: QuotaFailure_Violation, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.rpc.QuotaFailure.Violation
 */
export declare const QuotaFailure_Violation: QuotaFailure_Violation$Type;
declare class PreconditionFailure$Type extends MessageType<PreconditionFailure> {
    constructor();
    create(value?: PartialMessage<PreconditionFailure>): PreconditionFailure;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PreconditionFailure): PreconditionFailure;
    internalBinaryWrite(message: PreconditionFailure, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.rpc.PreconditionFailure
 */
export declare const PreconditionFailure: PreconditionFailure$Type;
declare class PreconditionFailure_Violation$Type extends MessageType<PreconditionFailure_Violation> {
    constructor();
    create(value?: PartialMessage<PreconditionFailure_Violation>): PreconditionFailure_Violation;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PreconditionFailure_Violation): PreconditionFailure_Violation;
    internalBinaryWrite(message: PreconditionFailure_Violation, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.rpc.PreconditionFailure.Violation
 */
export declare const PreconditionFailure_Violation: PreconditionFailure_Violation$Type;
declare class BadRequest$Type extends MessageType<BadRequest> {
    constructor();
    create(value?: PartialMessage<BadRequest>): BadRequest;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: BadRequest): BadRequest;
    internalBinaryWrite(message: BadRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.rpc.BadRequest
 */
export declare const BadRequest: BadRequest$Type;
declare class BadRequest_FieldViolation$Type extends MessageType<BadRequest_FieldViolation> {
    constructor();
    create(value?: PartialMessage<BadRequest_FieldViolation>): BadRequest_FieldViolation;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: BadRequest_FieldViolation): BadRequest_FieldViolation;
    internalBinaryWrite(message: BadRequest_FieldViolation, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.rpc.BadRequest.FieldViolation
 */
export declare const BadRequest_FieldViolation: BadRequest_FieldViolation$Type;
declare class RequestInfo$Type extends MessageType<RequestInfo> {
    constructor();
    create(value?: PartialMessage<RequestInfo>): RequestInfo;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RequestInfo): RequestInfo;
    internalBinaryWrite(message: RequestInfo, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.rpc.RequestInfo
 */
export declare const RequestInfo: RequestInfo$Type;
declare class ResourceInfo$Type extends MessageType<ResourceInfo> {
    constructor();
    create(value?: PartialMessage<ResourceInfo>): ResourceInfo;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ResourceInfo): ResourceInfo;
    internalBinaryWrite(message: ResourceInfo, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.rpc.ResourceInfo
 */
export declare const ResourceInfo: ResourceInfo$Type;
declare class Help$Type extends MessageType<Help> {
    constructor();
    create(value?: PartialMessage<Help>): Help;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Help): Help;
    internalBinaryWrite(message: Help, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.rpc.Help
 */
export declare const Help: Help$Type;
declare class Help_Link$Type extends MessageType<Help_Link> {
    constructor();
    create(value?: PartialMessage<Help_Link>): Help_Link;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Help_Link): Help_Link;
    internalBinaryWrite(message: Help_Link, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.rpc.Help.Link
 */
export declare const Help_Link: Help_Link$Type;
declare class LocalizedMessage$Type extends MessageType<LocalizedMessage> {
    constructor();
    create(value?: PartialMessage<LocalizedMessage>): LocalizedMessage;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LocalizedMessage): LocalizedMessage;
    internalBinaryWrite(message: LocalizedMessage, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.rpc.LocalizedMessage
 */
export declare const LocalizedMessage: LocalizedMessage$Type;
export {};
//# sourceMappingURL=error_details.d.ts.map