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

  // Human-readable description of the error.
  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;
};