use crate::metadata::IoTypeMetadataKind;
use crate::trivial_type::TrivialType;
use core::ops::Not;
#[derive(Debug, Default, Copy, Clone, Eq, PartialEq)]
#[repr(C)]
pub struct Bool {
byte: u8,
}
impl Not for Bool {
type Output = Self;
#[inline(always)]
fn not(self) -> Self::Output {
Self {
byte: (self.byte == 0) as u8,
}
}
}
impl From<bool> for Bool {
#[inline(always)]
fn from(value: bool) -> Self {
Self::new(value)
}
}
impl From<Bool> for bool {
#[inline(always)]
fn from(value: Bool) -> Self {
value.get()
}
}
unsafe impl TrivialType for Bool {
const METADATA: &[u8] = &[IoTypeMetadataKind::Bool as u8];
}
impl Bool {
#[inline(always)]
pub const fn new(value: bool) -> Self {
Self { byte: value as u8 }
}
#[inline(always)]
pub const fn get(&self) -> bool {
self.byte != 0
}
#[inline(always)]
pub const fn set(&mut self, value: bool) {
self.byte = value as u8;
}
}