use heterob::{bit_numbering::Lsb, endianness::Le, Seq, P2};
use super::CapabilityDataError;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct VitalProductData {
pub vpd_address: u16,
pub transfer_completed: bool,
pub vpd_data: u32,
}
impl TryFrom<&[u8]> for VitalProductData {
type Error = CapabilityDataError;
fn try_from(slice: &[u8]) -> Result<Self, Self::Error> {
let Seq {
head: Le((word, vpd_data)),
..
} = P2(slice).try_into().map_err(|_| CapabilityDataError {
name: "Vital Product Data",
size: 6,
})?;
let Lsb((vpd_address, transfer_completed)) = P2::<u16, 15, 1>(word).into();
Ok(Self {
vpd_address,
transfer_completed,
vpd_data,
})
}
}