// Copyright 2017 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.bluetooth;

enum ErrorCode {
    UNKNOWN = 0;
    FAILED = 1;
    CANCELED = 2;
    IN_PROGRESS = 3;
    TIMED_OUT = 4;
    NOT_FOUND = 5;
    NOT_SUPPORTED = 6;
    BLUETOOTH_NOT_AVAILABLE = 7;
    BAD_STATE = 8;
    INVALID_ARGUMENTS = 9;
    ALREADY = 10;
    PROTOCOL_ERROR = 11;
};

// Represents an error result returned from an asynchronous operation.
struct Error {
    // Represents a high-level error code. If this is set to ErrorCode.PROTOCOL_ERROR, then
    // |protocol_error_code| will represent a Bluetooth protocol error code. The specific
    // protocol that caused the error will be context-specific, e.g. GATT interfaces will
    // return ATT protocol error codes.
    ErrorCode error_code;

    // Protocol error code. The value of this field is relevant only if |error_code| is set to
    // ErrorCode.PROTOCOL_ERROR.
    uint32 protocol_error_code;

    // Debug descriptioon of an error. This provides additional debugging information for an error
    // and is not intended to be displayed in user interfaces.
    string? description;
};

// Represents the result of an asynchronous operation.
struct Status {
    // |error| will be null if this represents a "success" status, i.e. no error has occurred.
    Error? error;
};
