1pub const ZON_MAGIC: u32 = 0x5A4F4E21;
3
4#[repr(C, align(64))]
8#[derive(Debug, Clone, Copy)]
9pub struct ZonHeader {
10 pub magic: u32,
11 pub version: u32,
12 pub root: u32,
13 _reserved: [u8; 52],
17}
18
19impl Default for ZonHeader {
20 fn default() -> Self {
21 Self {
22 magic: ZON_MAGIC,
23 version: 1,
24 root: 0,
25 _reserved: [0; 52],
26 }
27 }
28}
29
30impl ZonHeader {
31 pub fn set_root(&mut self, offset: u32) {
32 self.root = offset;
33 }
34}
35
36#[cfg(test)]
37mod tests {
38 use super::*;
39 use std::mem::{align_of, size_of};
40
41 #[test]
42 fn test_zon_header_layout() {
43 assert_eq!(align_of::<ZonHeader>(), 64, "ZonHeader must be 64-byte aligned");
44 assert_eq!(size_of::<ZonHeader>(), 64, "ZonHeader size must be exactly 64 bytes");
45 }
46
47 #[test]
48 fn test_magic_number() {
49 let header = ZonHeader::default();
50 assert_eq!(header.magic, 0x5A4F4E21);
51 }
52}