#ifndef ASH_QUICK_PAIR_COMMON_DEVICE_H_
#define ASH_QUICK_PAIR_COMMON_DEVICE_H_
#include <cstdint>
#include <vector>
#include "ash/quick_pair/common/protocol.h"
#include "base/component_export.h"
#include "base/containers/flat_map.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_refptr.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
namespace ash {
namespace quick_pair {
enum class DeviceFastPairVersion {
kV1,
kHigherThanV1,
};
class COMPONENT_EXPORT(QUICK_PAIR_COMMON) Device
: public base::RefCounted<Device> {
public:
Device(const std::string& metadata_id,
const std::string& ble_address,
Protocol protocol);
Device(const Device&) = delete;
Device& operator=(const Device&) = delete;
Device& operator=(Device&&) = delete;
const absl::optional<std::string>& classic_address() const {
return classic_address_;
}
void set_classic_address(const absl::optional<std::string>& address) {
classic_address_ = address;
}
const absl::optional<std::string>& display_name() const {
return display_name_;
}
void set_display_name(const absl::optional<std::string>& display_name) {
display_name_ = display_name;
}
const absl::optional<DeviceFastPairVersion> version() const {
return version_;
}
void set_version(absl::optional<DeviceFastPairVersion> version) {
version_ = version;
}
const absl::optional<std::vector<uint8_t>> account_key() const {
return account_key_;
}
void set_account_key(std::vector<uint8_t> account_key) {
account_key_ = account_key;
}
const std::string& metadata_id() const { return metadata_id_; }
const std::string& ble_address() const { return ble_address_; }
Protocol protocol() const { return protocol_; }
private:
friend class base::RefCounted<Device>;
~Device();
const std::string metadata_id_;
const std::string ble_address_;
const Protocol protocol_;
absl::optional<std::string> classic_address_;
absl::optional<std::string> display_name_;
absl::optional<DeviceFastPairVersion> version_;
absl::optional<std::vector<uint8_t>> account_key_;
};
COMPONENT_EXPORT(QUICK_PAIR_COMMON)
std::ostream& operator<<(std::ostream& stream, const Device& device);
COMPONENT_EXPORT(QUICK_PAIR_COMMON)
std::ostream& operator<<(std::ostream& stream, scoped_refptr<Device> device);
}
}
#endif