// Copyright 2023 Google LLC
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/// A Bluetooth Company ID, which is assigned by the Bluetotoh SIG.
/// Company identifiers are unique numbers assigned by the Bluetooth SIG to
/// member companies requesting one. Referenced in the Bluetooth Core Spec in
/// many commands and formats. See the Assigned Number Document for a reference.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct CompanyId(u16);

impl From<u16> for CompanyId {
    fn from(value: u16) -> Self {
        Self(value)
    }
}

impl From<CompanyId> for u16 {
    fn from(value: CompanyId) -> Self {
        value.0
    }
}

impl core::fmt::Display for CompanyId {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "Company (ID {:02x})", self.0)
    }
}
