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