#[derive(Debug)]
pub struct Descriptor<'a> {
pub code: u8,
pub data: &'a [u8],
}
#[derive(Debug)]
pub struct DescriptorData<'a> {
pub key: u8,
pub asc: u8,
pub ascq: u8,
pub descriptors: Vec<Descriptor<'a>>,
}
pub fn parse(data: &[u8]) -> Option<DescriptorData> {
if data.len() < 8 {
return None;
}
let len = (data[7] + 8) as usize;
let mut descriptors = vec![];
if data.len() < len {
return None;
}
let mut current_desc: usize = 8;
while current_desc < len {
let (code, dlen) = (data[current_desc], data[current_desc + 1]);
let dlen = dlen as usize;
current_desc += 2;
descriptors.push(Descriptor {
code: code,
data: &data[current_desc .. current_desc+dlen],
});
current_desc += dlen;
}
Some(DescriptorData {
key: data[1] & 0b1111,
asc: data[2],
ascq: data[3],
descriptors: descriptors,
})
}