pub mod flags;
use binrw::binrw;
pub use flags::*;
use getset::Getters;
use serde::Serialize;
use crate::*;
pub const ACE_HEADER_SIZE: u16 = 8;
#[binrw]
#[derive(Eq, PartialEq, Getters, Clone, Copy, Debug, Serialize)]
#[getset(get = "pub")]
pub struct Header {
ace_flags: ace::header::Flags,
#[brw(assert(ace_size%4 == 0))]
#[serde(skip)]
ace_size: u16,
mask: AccessMask,
#[br(calc=std::cmp::min(0, 4-(ace_size%4)))]
#[bw(ignore)]
#[serde(skip)]
expected_padding: u16,
}
impl Header {
pub fn new(
ace_flags: ace::header::Flags,
ace_size_without_header: u16,
mask: AccessMask,
) -> Self {
let expected_padding = std::cmp::min(0, 4 - (ace_size_without_header % 4));
let ace_size = ACE_HEADER_SIZE + ace_size_without_header + expected_padding;
Self {
ace_flags,
ace_size,
mask,
expected_padding,
}
}
}