diff options
Diffstat (limited to 'common/object/src/lib.rs')
| -rw-r--r-- | common/object/src/lib.rs | 55 |
1 files changed, 3 insertions, 52 deletions
diff --git a/common/object/src/lib.rs b/common/object/src/lib.rs index 33d38d1..90ddef5 100644 --- a/common/object/src/lib.rs +++ b/common/object/src/lib.rs @@ -4,6 +4,9 @@ Copyright (C) 2025 metamuffin <metamuffin.org> */ +mod value; +pub use value::*; + use std::marker::PhantomData; #[repr(transparent)] @@ -78,55 +81,3 @@ impl<'a> Object<'a> { } } } - -pub trait Value<'a>: Sized { - const ALIGNED: bool; - fn load_aligned(buf: &'a [u32]) -> Option<Self> { - let _ = buf; - None - } - fn load_unaligned(buf: &'a [u8]) -> Option<Self> { - let _ = buf; - None - } - fn store(&self, buf: &mut Vec<u8>); - fn size(&self) -> usize; -} -impl<'a> Value<'a> for &'a str { - const ALIGNED: bool = false; - fn load_unaligned(buf: &'a [u8]) -> Option<Self> { - str::from_utf8(buf).ok() - } - fn store(&self, buf: &mut Vec<u8>) { - buf.extend(self.as_bytes()); - } - fn size(&self) -> usize { - self.len() - } -} -impl Value<'_> for u32 { - const ALIGNED: bool = false; - fn load_aligned(buf: &[u32]) -> Option<Self> { - buf.get(0).copied() - } - fn store(&self, buf: &mut Vec<u8>) { - buf.extend(self.to_ne_bytes()); - } - fn size(&self) -> usize { - 4 - } -} -impl Value<'_> for u64 { - const ALIGNED: bool = false; - fn load_aligned(buf: &[u32]) -> Option<Self> { - let hi = *buf.get(0)? as u64; - let lo = *buf.get(1)? as u64; - Some(hi << 32 | lo) - } - fn store(&self, buf: &mut Vec<u8>) { - buf.extend(self.to_ne_bytes()); - } - fn size(&self) -> usize { - 8 - } -} |