#![forbid(unsafe_code)]
pub const FORMAT_MAJOR: u16 = 1;
pub const FORMAT_MINOR: u16 = 0;
pub const SUPERBLOCK_MAGIC: [u8; 8] = *b"ENTR0FS\0";
pub const SUPERBLOCK_VERSION: u8 = 1;
pub const RECORD_VERSION: u8 = 1;
pub const SEGMENT_MAGIC: [u8; 4] = *b"ESEG";
pub const SUPERBLOCK_SLOT_SIZE: u64 = 512;
pub const SUPERBLOCK_SLOT_A_OFFSET: u64 = 0;
pub const SUPERBLOCK_SLOT_B_OFFSET: u64 = 4096;
pub const RECORD_HEADER_SIZE: u64 = 58;
pub const TAG_PAD: u8 = 0x7F;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(u8)]
pub enum RecordTag {
Data = 0x01,
Model = 0x02,
Inode = 0x03,
BtreeNode = 0x04,
Root = 0x05,
Xattr = 0x06,
Pad = 0x7F,
}
impl RecordTag {
pub fn from_u8(v: u8) -> Option<Self> {
match v {
0x01 => Some(Self::Data),
0x02 => Some(Self::Model),
0x03 => Some(Self::Inode),
0x04 => Some(Self::BtreeNode),
0x05 => Some(Self::Root),
0x06 => Some(Self::Xattr),
0x7F => Some(Self::Pad),
_ => None,
}
}
pub const fn tag(self) -> u8 {
self as u8
}
pub const fn name(self) -> &'static str {
match self {
RecordTag::Data => "data",
RecordTag::Model => "model",
RecordTag::Inode => "inode",
RecordTag::BtreeNode => "btree",
RecordTag::Root => "root",
RecordTag::Xattr => "xattr",
RecordTag::Pad => "pad",
}
}
}