use std::num::NonZeroU64;
use bytemuck::{Pod, Zeroable};
use crate::SIGNATURE;
#[derive(Pod, Zeroable, PartialEq, Hash, Debug, Clone, Copy)]
#[repr(C)]
pub struct Header {
signature: u32,
capacity: u16,
valid: u16,
offset: u64,
next: u64,
}
impl Header {
pub fn signature(&self) -> u32 {
self.signature
}
pub fn set_signature(&mut self, value: u32) {
self.signature = value;
}
pub fn capacity(&self) -> u16 {
self.capacity
}
pub fn set_capacity(&mut self, value: u16) {
self.capacity = value;
}
pub fn valid(&self) -> u16 {
self.valid
}
pub fn set_valid(&mut self, value: u16) {
self.valid = value;
}
pub fn offset(&self) -> u64 {
self.offset
}
pub fn set_offset(&mut self, value: u64) {
self.offset = value;
}
pub fn next(&self) -> Option<NonZeroU64> {
NonZeroU64::new(self.next)
}
pub fn set_next(&mut self, value: Option<NonZeroU64>) {
self.next = value.map(|v| v.get()).unwrap_or(0);
}
pub fn is_valid(&self) -> bool {
self.signature == SIGNATURE
}
}
impl Default for Header {
fn default() -> Self {
Self {
signature: SIGNATURE,
..Self::zeroed()
}
}
}