use crate::types::{le_u32, le_u64};
pub const OBJECT_HEADER_SIZE: usize = 32;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct ObjectHeader {
pub checksum: u64,
pub identifier: u64,
pub transaction_identifier: u64,
pub object_type: u32,
pub subtype: u32,
}
impl ObjectHeader {
pub fn parse(data: &[u8]) -> crate::Result<Self> {
Ok(Self {
checksum: le_u64(data, 0)?,
identifier: le_u64(data, 8)?,
transaction_identifier: le_u64(data, 16)?,
object_type: le_u32(data, 24)?,
subtype: le_u32(data, 28)?,
})
}
pub const fn kind(self) -> u16 {
(self.object_type & 0xffff) as u16
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u16)]
pub enum ObjectType {
Invalid = 0,
ContainerSuperblock = 1,
BTreeRoot = 2,
BTreeNode = 3,
SpaceManager = 5,
SpaceManagerChunkInformationBlock = 7,
ObjectMap = 11,
CheckpointMap = 12,
VolumeSuperblock = 13,
}