use bitfield::bitfield;
use super::SframeHeader;
bitfield! {
pub struct ConfigByte(MSB0 [u8]);
impl Debug;
u8;
#[inline]
pub extended_key_flag, set_extended_key_flag: 0;
#[inline]
pub key_or_klen, set_key_or_klen: 3 , 1;
#[inline]
pub extended_ctr_flag, set_extended_ctr_flag: 4;
#[inline]
pub ctr_or_clen, set_ctr_or_clen: 7 , 5;
}
impl<T: AsRef<[u8]>> ConfigByte<T> {
pub fn header_len(&self) -> usize {
let mut len = SframeHeader::STATIC_HEADER_LENGTH;
if self.extended_key_flag() {
len += (self.key_or_klen() + SframeHeader::LEN_OFFSET) as usize;
}
if self.extended_ctr_flag() {
len += (self.ctr_or_clen() + SframeHeader::LEN_OFFSET) as usize;
}
len
}
}
impl<'a> From<&'a u8> for ConfigByte<&'a [u8]> {
fn from(value: &'a u8) -> Self {
ConfigByte(std::slice::from_ref(value))
}
}
impl<'a> From<&'a mut u8> for ConfigByte<&'a mut [u8]> {
fn from(value: &'a mut u8) -> Self {
ConfigByte(std::slice::from_mut(value))
}
}