use zerocopy::{FromBytes, Immutable, IntoBytes, KnownLayout};
use crate::fsverity::FsVerityHashValue;
#[derive(Debug, FromBytes, Immutable, KnownLayout, IntoBytes)]
#[repr(C)]
pub struct OverlayMetacopy<H: FsVerityHashValue> {
version: u8,
len: u8,
flags: u8,
digest_algo: u8,
pub digest: H,
}
impl<H: FsVerityHashValue> OverlayMetacopy<H> {
pub fn new(digest: &H) -> Self {
Self {
version: 0,
len: size_of::<Self>() as u8,
flags: 0,
digest_algo: H::ALGORITHM.kernel_id(),
digest: digest.clone(),
}
}
pub fn valid(&self) -> bool {
self.version == 0
&& self.len == size_of::<Self>() as u8
&& self.flags == 0
&& self.digest_algo == H::ALGORITHM.kernel_id()
}
pub(super) fn version(&self) -> u8 {
self.version
}
pub(super) fn len(&self) -> u8 {
self.len
}
pub(super) fn flags(&self) -> u8 {
self.flags
}
pub(super) fn digest_algo(&self) -> u8 {
self.digest_algo
}
}