#![no_std]
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct AbiBool(u32);
impl AbiBool {
pub const FALSE: Self = Self(0);
pub const TRUE: Self = Self(1);
pub const fn from_bool(val: bool) -> Self {
Self(val as u32)
}
pub const fn to_bool(self) -> bool {
self.0 != 0
}
}
impl From<bool> for AbiBool {
fn from(val: bool) -> Self {
Self::from_bool(val)
}
}
impl From<AbiBool> for bool {
fn from(val: AbiBool) -> Self {
val.to_bool()
}
}
#[macro_export]
macro_rules! define_newtype {
($(#[$meta:meta])* $vis:vis struct $name:ident($inner:ty);) => {
$(#[$meta])*
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
$vis struct $name($inner);
impl $name {
pub const fn from_raw(val: $inner) -> Self {
Self(val)
}
pub const fn raw(self) -> $inner {
self.0
}
}
};
}