|  | // Copyright 2019 The Fuchsia Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | library fuchsia.firebase.messaging; | 
|  |  | 
|  | /// From FIRMessagingError at | 
|  | /// https://github.com/firebase/firebase-ios-sdk/blob/HEAD/Firebase/Messaging/Public/FIRMessaging.h | 
|  | enum MessagingErrorCode { | 
|  | /// Couldn't validate request from this client. | 
|  | AUTHENTICATION = 1; | 
|  |  | 
|  | /// InstanceID service cannot be accessed. | 
|  | NO_ACCESS = 2; | 
|  |  | 
|  | /// Request to InstanceID backend timed out. | 
|  | TIMEOUT = 3; | 
|  |  | 
|  | /// No network available to reach the servers. | 
|  | NETWORK = 4; | 
|  |  | 
|  | /// Another similar operation in progress, bailing this one. | 
|  | OPERATION_IN_PROGRESS = 5; | 
|  |  | 
|  | /// Some parameters of the request were invalid. | 
|  | INVALID_REQUEST = 7; | 
|  |  | 
|  | /// Topic name is invalid for subscription/unsubscription. | 
|  | INVALID_TOPIC_NAME = 8; | 
|  | }; | 
|  |  | 
|  | /// From https://github.com/grpc/grpc/blob/HEAD/doc/statuscodes.md. | 
|  | enum CoreErrorCode { | 
|  | /// Not an error; returned on success. | 
|  | OK = 0; | 
|  |  | 
|  | /// The operation was cancelled, typically by the caller. | 
|  | CANCELLED = 1; | 
|  |  | 
|  | /// Unknown error. For example, this error may be returned when a Status | 
|  | /// value received from another address space belongs to an error space that | 
|  | /// is not known in this address space. Also errors raised by APIs that do | 
|  | /// not return enough error information may be converted to this error. | 
|  | UNKNOWN = 2; | 
|  |  | 
|  | /// The client specified an invalid argument. Note that this differs from | 
|  | /// `FAILED_PRECONDITION`. `INVALID_ARGUMENT` indicates arguments that are | 
|  | /// problematic regardless of the state of the system (e.g., a malformed | 
|  | /// file name). | 
|  | INVALID_ARGUMENT = 3; | 
|  |  | 
|  | /// The deadline expired before the operation could complete. For operations | 
|  | /// that change the state of the system, this error may be returned even if | 
|  | /// the operation has completed successfully. For example, a successful | 
|  | /// response from a server could have been delayed long enough for the | 
|  | /// deadline to expire. | 
|  | DEADLINE_EXCEEDED = 4; | 
|  |  | 
|  | /// Some requested entity (e.g., file or directory) was not found. | 
|  | NOT_FOUND = 5; | 
|  |  | 
|  | /// The entity that a client attempted to create (e.g., file or directory) | 
|  | /// already exists. | 
|  | ALREADY_EXISTS = 6; | 
|  |  | 
|  | /// The caller does not have permission to execute the specified operation. | 
|  | /// This error code does not imply the request is valid or the requested | 
|  | /// entity exists or satisfies other pre-conditions. | 
|  | PERMISSION_DENIED = 7; | 
|  |  | 
|  | /// The request does not have valid authentication credentials for the | 
|  | /// operation. | 
|  | UNAUTHENTICATED = 16; | 
|  |  | 
|  | /// Some resource has been exhausted, perhaps a per-user quota, or perhaps | 
|  | /// the entire file system is out of space. | 
|  | RESOURCE_EXHAUSTED = 8; | 
|  |  | 
|  | /// The operation was rejected because the system is not in a state required | 
|  | /// for the operation's execution. For example, the directory to be deleted | 
|  | /// is non-empty, an rmdir operation is applied to a non-directory, etc. | 
|  | FAILED_PRECONDITION = 9; | 
|  |  | 
|  | /// The operation was aborted, typically due to a concurrency issue such as | 
|  | /// a sequencer check failure or transaction abort. | 
|  | ABORTED = 10; | 
|  |  | 
|  | /// The operation was attempted past the valid range. E.g., seeking or | 
|  | /// reading past end-of-file. Unlike `INVALID_ARGUMENT`, this error indicates | 
|  | /// a problem that may be fixed if the system state changes. For example, a | 
|  | /// 32-bit file system will generate `INVALID_ARGUMENT` if asked to read at an | 
|  | /// offset that is not in the range [0,2^32-1], but it will generate | 
|  | /// `OUT_OF_RANGE` if asked to read from an offset past the current file size. | 
|  | OUT_OF_RANGE = 11; | 
|  |  | 
|  | /// The operation is not implemented or is not supported/enabled in this | 
|  | /// service. | 
|  | UNIMPLEMENTED = 12; | 
|  |  | 
|  | /// Internal errors. This means that some invariants expected by the | 
|  | /// underlying system have been broken. This error code is reserved for | 
|  | /// serious errors. | 
|  | INTERNAL = 13; | 
|  |  | 
|  | /// The service is currently unavailable. This is most likely a transient | 
|  | /// condition, which can be corrected by retrying with a backoff. Note that | 
|  | /// it is not always safe to retry non-idempotent operations. | 
|  | UNAVAILABLE = 14; | 
|  |  | 
|  | /// Unrecoverable data loss or corruption. | 
|  | DATA_LOSS = 15; | 
|  | }; | 
|  |  | 
|  | struct ServiceError { | 
|  | string domain; | 
|  | string code; | 
|  | string? message; | 
|  | }; | 
|  |  | 
|  | flexible union ErrorValue { | 
|  | 1: MessagingErrorCode messaging; | 
|  | 2: CoreErrorCode core; | 
|  | 3: uint32 http; | 
|  | 4: ServiceError service; | 
|  | }; | 
|  |  | 
|  | struct Error { | 
|  | ErrorValue error; | 
|  |  | 
|  | /// This error may be caused by an error in the local infrastructure, | 
|  | /// reachability, firebase service, the backend service, or any other layer | 
|  | /// of the operation. In this case, a higher layer may wrap a lower level | 
|  | /// error with its own error to provide more information. | 
|  | Error? inner; | 
|  | }; |