use heterob::{bit_numbering::Lsb, endianness::Le, Seq, P2, P3};
use super::CapabilityDataError;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SlotIdentification {
pub expansion_slot: ExpansionSlot,
pub chassis_number: u8,
}
impl<'a> TryFrom<&'a [u8]> for SlotIdentification {
type Error = CapabilityDataError;
fn try_from(slice: &'a [u8]) -> Result<Self, Self::Error> {
let Seq {
head: Le((expansion_slot, chassis_number)),
..
} = P2(slice).try_into().map_err(|_| CapabilityDataError {
name: "Slot Identification",
size: 2,
})?;
let Lsb((expansion_slots_provided, first_in_chassis, ())) =
P3::<u8, 5, 1, 2>(expansion_slot).into();
let expansion_slot = ExpansionSlot {
expansion_slots_provided,
first_in_chassis,
};
Ok(Self {
expansion_slot,
chassis_number,
})
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ExpansionSlot {
pub expansion_slots_provided: u8,
pub first_in_chassis: bool,
}