chromium/device/bluetooth/public/cpp/bluetooth_address.h

// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef DEVICE_BLUETOOTH_PUBLIC_CPP_BLUETOOTH_ADDRESS_H_
#define DEVICE_BLUETOOTH_PUBLIC_CPP_BLUETOOTH_ADDRESS_H_

#include <stddef.h>
#include <stdint.h>

#include <string>
#include <string_view>

#include "base/containers/span.h"

namespace device {

// Parses a Bluetooth address to an output buffer. The output buffer must be
// exactly 6 bytes in size. The address can be formatted in one of three ways:
//
//   1A:2B:3C:4D:5E:6F
//   1A-2B-3C-4D-5E-6F
//   1A2B3C4D5E6F
bool ParseBluetoothAddress(std::string_view input, base::span<uint8_t> output);

// Returns |address| in the canonical format: XX:XX:XX:XX:XX:XX, where each 'X'
// is a hex digit.  If the input |address| is invalid, returns an empty string.
std::string CanonicalizeBluetoothAddress(std::string_view address);
std::string CanonicalizeBluetoothAddress(
    const std::array<uint8_t, 6>& address_bytes);

}  // namespace device

#endif  // DEVICE_BLUETOOTH_PUBLIC_CPP_BLUETOOTH_ADDRESS_H_