use binrw::BinRead;
use binrw::BinReaderExt;
use binrw::BinWrite;
use binrw::BinWriterExt;
use bitflags::bitflags;
bitflags! {
#[derive(Eq, PartialEq, Debug, Copy, Clone)]
pub struct ControlFlags: u16 {
const None = 0x0000;
const OwnerDefaulted = 0x0001; const GroupDefaulted = 0x0002; const DiscretionaryAclPresent = 0x0004; const DiscretionaryAclDefaulted = 0x0008; const SystemAclPresent = 0x0010; const SystemAclDefaulted = 0x0020; const DiscretionaryAclUntrusted = 0x0040; const ServerSecurity = 0x0080; const DiscretionaryAclAutoInheritRequired = 0x0100; const SystemAclAutoInheritRequired = 0x0200; const DiscretionaryAclAutoInherited = 0x0400; const SystemAclAutoInherited = 0x0800; const DiscretionaryAclProtected = 0x1000; const SystemAclProtected = 0x2000; const RMControlValid = 0x4000; const SelfRelative = 0x8000; }
}
impl BinRead for ControlFlags {
type Args<'a> = ();
fn read_options<R: std::io::Read + std::io::Seek>(
reader: &mut R,
_endian: binrw::Endian,
args: Self::Args<'_>,
) -> binrw::BinResult<Self> {
let raw_value: u16 = reader.read_le_args(args)?;
Ok(ControlFlags::from_bits(raw_value).unwrap())
}
}
impl BinWrite for ControlFlags {
type Args<'a> = ();
fn write_options<W: std::io::Write + std::io::Seek>(
&self,
writer: &mut W,
_endian: binrw::Endian,
args: Self::Args<'_>,
) -> binrw::BinResult<()> {
let raw_value = self.bits();
writer.write_le_args(&raw_value, args)
}
}