mod flags {
pub const TRACK_IDS: u8 = 1 << 0;
pub const TRACK_CLASSES: u8 = 1 << 1;
pub const HIGHEST: u8 = TRACK_CLASSES;
}
#[derive(Debug, Copy, Clone, PartialEq)]
pub struct ParserOptions {
flags: u8,
}
impl Default for ParserOptions {
fn default() -> Self {
Self { flags: 0 }
}
}
impl ParserOptions {
pub fn new() -> Self {
Self::default()
}
pub fn from_raw_checked(flags: u8) -> Option<Self> {
if flags > flags::HIGHEST * 2 - 1 {
None
} else {
Some(Self {
flags,
..Default::default()
})
}
}
pub fn to_raw(&self) -> u8 {
self.flags
}
fn set_flag(&mut self, flag: u8) {
self.flags |= flag;
}
#[inline]
fn has_flag(&self, flag: u8) -> bool {
self.flags & flag != 0
}
pub fn track_ids(mut self) -> Self {
self.set_flag(flags::TRACK_IDS);
self
}
pub fn track_classes(mut self) -> Self {
self.set_flag(flags::TRACK_CLASSES);
self
}
#[inline]
pub fn is_tracking_ids(&self) -> bool {
self.has_flag(flags::TRACK_IDS)
}
#[inline]
pub fn is_tracking_classes(&self) -> bool {
self.has_flag(flags::TRACK_CLASSES)
}
#[inline]
pub fn is_tracking(&self) -> bool {
self.flags != 0
}
}