From bb7aa0604d1928ec435e97f6e58521597bc61c3b Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 6 Jan 2026 02:53:21 +0100 Subject: impl value for object --- common/object/src/lib.rs | 55 +++--------------------------------------------- 1 file changed, 3 insertions(+), 52 deletions(-) (limited to 'common/object/src/lib.rs') 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 */ +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 { - let _ = buf; - None - } - fn load_unaligned(buf: &'a [u8]) -> Option { - let _ = buf; - None - } - fn store(&self, buf: &mut Vec); - fn size(&self) -> usize; -} -impl<'a> Value<'a> for &'a str { - const ALIGNED: bool = false; - fn load_unaligned(buf: &'a [u8]) -> Option { - str::from_utf8(buf).ok() - } - fn store(&self, buf: &mut Vec) { - 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 { - buf.get(0).copied() - } - fn store(&self, buf: &mut Vec) { - 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 { - let hi = *buf.get(0)? as u64; - let lo = *buf.get(1)? as u64; - Some(hi << 32 | lo) - } - fn store(&self, buf: &mut Vec) { - buf.extend(self.to_ne_bytes()); - } - fn size(&self) -> usize { - 8 - } -} -- cgit v1.3