// 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;
};
