use crate::error::Result;
#[derive(Debug, Clone)]
pub struct SymbolTableMessage {
pub btree_addr: u64,
pub name_heap_addr: u64,
}
impl SymbolTableMessage {
pub fn decode(data: &[u8], sizeof_addr: u8) -> Result<Self> {
let sa = sizeof_addr as usize;
if data.len() < sa * 2 {
return Err(crate::error::Error::InvalidFormat(
"symbol table message too short".into(),
));
}
let btree_addr = read_addr(data, 0, sizeof_addr);
let name_heap_addr = read_addr(data, sa, sizeof_addr);
Ok(Self {
btree_addr,
name_heap_addr,
})
}
}
fn read_addr(data: &[u8], offset: usize, size: u8) -> u64 {
let mut val = 0u64;
for i in 0..size as usize {
val |= (data[offset + i] as u64) << (i * 8);
}
val
}