// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef DEVICE_BLUETOOTH_BLUEZ_BLUETOOTH_SERVICE_ATTRIBUTE_VALUE_BLUEZ_H_
#define DEVICE_BLUETOOTH_BLUEZ_BLUETOOTH_SERVICE_ATTRIBUTE_VALUE_BLUEZ_H_
#include <cstddef>
#include <memory>
#include <vector>
#include "base/values.h"
#include "device/bluetooth/bluetooth_export.h"
namespace bluez {
// This class contains a Bluetooth service attribute. A service attribute is
// defined by the following fields,
// type: This is the type of the attribute. Along with being any of the
// fixed types, an attribute can also be of type sequence, which means
// that it contains an array of other attributes.
// size: This is the size of the attribute. This can be variable for each type.
// For example, a UUID can have the sizes, 2, 4 or 16 bytes.
// value: This is the raw value of the attribute. For example, for a UUID, it
// will be the string representation of the UUID. For a sequence, it
// will be an array of other attributes.
class DEVICE_BLUETOOTH_EXPORT BluetoothServiceAttributeValueBlueZ {
public:
enum Type { NULLTYPE = 0, UINT, INT, UUID, STRING, BOOL, SEQUENCE, URL };
using Sequence = std::vector<BluetoothServiceAttributeValueBlueZ>;
BluetoothServiceAttributeValueBlueZ();
BluetoothServiceAttributeValueBlueZ(Type type,
size_t size,
std::unique_ptr<base::Value> value);
explicit BluetoothServiceAttributeValueBlueZ(
std::unique_ptr<Sequence> sequence);
BluetoothServiceAttributeValueBlueZ(
const BluetoothServiceAttributeValueBlueZ& attribute);
BluetoothServiceAttributeValueBlueZ& operator=(
const BluetoothServiceAttributeValueBlueZ& attribute);
~BluetoothServiceAttributeValueBlueZ();
Type type() const { return type_; }
size_t size() const { return size_; }
const Sequence& sequence() const { return *sequence_.get(); }
const base::Value& value() const { return *value_.get(); }
private:
Type type_;
size_t size_;
std::unique_ptr<base::Value> value_;
std::unique_ptr<Sequence> sequence_;
};
} // namespace bluez
#endif // DEVICE_BLUETOOTH_BLUEZ_BLUETOOTH_SERVICE_ATTRIBUTE_VALUE_BLUEZ_H_