const MAGIC: &[u8] = "PinEightGBFS\r\n\u{1a}\n".as_bytes();
pub(crate) const GBFS_HEADER_LENGTH: usize = 32;
use crate::GBFSError;
#[derive(Debug, Clone)]
pub(crate) struct GBFSHeader {
pub(crate) dir_off: u16,
pub(crate) dir_num_members: u16,
}
impl GBFSHeader {
pub(crate) const fn from_slice(
data: &[u8; GBFS_HEADER_LENGTH],
) -> Result<GBFSHeader, GBFSError> {
let mut i = 0;
while i < 16 {
if data[i] != MAGIC[i] {
return Err(GBFSError::HeaderInvalid);
}
i += 1;
}
let dir_off = u16::from_le_bytes([data[20], data[21]]);
let dir_num_members = u16::from_le_bytes([data[22], data[23]]);
let mut i = 24;
while i < 32 {
if data[i] != 0 {
return Err(GBFSError::HeaderInvalid);
}
i += 1;
}
return Ok(GBFSHeader {
dir_off,
dir_num_members,
});
}
}