use heterob::{endianness::Le, P3};
use super::CapabilityDataError;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct BridgeSubsystemVendorId {
pub reserved: u16,
pub subsystem_vendor_id: u16,
pub subsystem_id: u16,
}
impl BridgeSubsystemVendorId {
pub const SIZE: usize = 2 + 2 + 2;
}
impl From<[u8; BridgeSubsystemVendorId::SIZE]> for BridgeSubsystemVendorId {
fn from(bytes: [u8; BridgeSubsystemVendorId::SIZE]) -> Self {
let Le((reserved, subsystem_vendor_id, subsystem_id)) = P3(bytes).into();
Self {
reserved,
subsystem_vendor_id,
subsystem_id,
}
}
}
impl<'a> TryFrom<&'a [u8]> for BridgeSubsystemVendorId {
type Error = CapabilityDataError;
fn try_from(slice: &'a [u8]) -> Result<Self, Self::Error> {
slice
.get(..Self::SIZE)
.and_then(|slice| <[u8; Self::SIZE]>::try_from(slice).ok())
.ok_or(CapabilityDataError {
name: "Bridge Subsystem Vendor ID",
size: Self::SIZE,
})
.map(Self::from)
}
}