use std::fmt::Display;
use binrw::binrw;
use getset::Getters;
use crate::Ace;
use crate::sddl_h::*;
#[binrw]
#[derive(Eq, PartialEq, Getters)]
#[getset(get="pub")]
#[brw(little)]
pub struct Acl {
acl_revision: AclRevision,
#[br(temp)]
#[bw(calc(0))]
#[getset(skip)]
_sbz1: u8,
acl_size: u16,
ace_count: u16,
#[br(temp)]
#[bw(calc(0))]
#[getset(skip)]
_sbz2: u16,
#[br(count=ace_count)]
ace_list: Vec<Ace>,
}
impl Display for Acl {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
for ace in self.ace_list() {
write!(f, "{SDDL_ACE_BEGIN}{ace}{SDDL_ACE_END}")?;
}
Ok(())
}
}
#[binrw]
#[derive(Eq, PartialEq, Clone, Copy, Default)]
#[allow(non_camel_case_types)]
#[brw(repr=u8)]
pub enum AclRevision {
#[default]
ACL_REVISION = 0x02,
ACL_REVISION_DS = 0x04,
}