use std::fmt;
#[derive(Clone, Copy, Eq, PartialEq, bytemuck::Pod, bytemuck::Zeroable)]
#[repr(transparent)]
pub struct Value {
inner: u32,
}
impl Value {
pub fn to_i32(self) -> i32 {
i32::from_le_bytes(self.inner.to_le_bytes())
}
pub fn to_u32(self) -> u32 {
self.inner
}
pub fn to_bool(self) -> bool {
self.inner != 0
}
}
impl From<bool> for Value {
fn from(value: bool) -> Self {
let inner = if value { 1 } else { 0 };
Self { inner }
}
}
impl From<i32> for Value {
fn from(value: i32) -> Self {
let inner = u32::from_le_bytes(value.to_le_bytes());
Self { inner }
}
}
impl From<u32> for Value {
fn from(inner: u32) -> Self {
Self { inner }
}
}
impl fmt::Debug for Value {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
self.inner.fmt(f)
}
}