#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct FieldFlags(u32);
impl FieldFlags {
pub fn from_bits(bits: u32) -> Self {
Self(bits)
}
pub fn empty() -> Self {
Self(0)
}
pub fn bits(self) -> u32 {
self.0
}
fn has(self, bit: u32) -> bool {
self.0 & (1 << bit) != 0
}
pub fn read_only(self) -> bool {
self.has(0)
}
pub fn required(self) -> bool {
self.has(1)
}
pub fn no_export(self) -> bool {
self.has(2)
}
pub fn multiline(self) -> bool {
self.has(12)
}
pub fn password(self) -> bool {
self.has(13)
}
pub fn file_select(self) -> bool {
self.has(20)
}
pub fn do_not_spell_check(self) -> bool {
self.has(22)
}
pub fn do_not_scroll(self) -> bool {
self.has(23)
}
pub fn comb(self) -> bool {
self.has(24)
}
pub fn rich_text(self) -> bool {
self.has(25)
}
pub fn no_toggle_to_off(self) -> bool {
self.has(14)
}
pub fn radio(self) -> bool {
self.has(15)
}
pub fn push_button(self) -> bool {
self.has(16)
}
pub fn radios_in_unison(self) -> bool {
self.has(25)
}
pub fn combo(self) -> bool {
self.has(17)
}
pub fn edit(self) -> bool {
self.has(18)
}
pub fn sort(self) -> bool {
self.has(19)
}
pub fn multi_select(self) -> bool {
self.has(21)
}
pub fn commit_on_sel_change(self) -> bool {
self.has(26)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn empty_flags() {
assert!(!FieldFlags::empty().read_only());
}
#[test]
fn read_only() {
assert!(FieldFlags::from_bits(1).read_only());
}
#[test]
fn multiline() {
assert!(FieldFlags::from_bits(1 << 12).multiline());
}
#[test]
fn combo() {
assert!(FieldFlags::from_bits(1 << 17).combo());
}
#[test]
fn push_button() {
assert!(FieldFlags::from_bits(1 << 16).push_button());
}
#[test]
fn radio() {
assert!(FieldFlags::from_bits(1 << 15).radio());
}
}