any_vec/any_value/
wrapper.rs1use core::any::TypeId;
2use core::mem::size_of;
3use crate::any_value::{AnyValue, AnyValueMut, AnyValueTypelessMut, AnyValueTypeless, AnyValueSizeless, AnyValueSizelessMut};
4
5#[derive(Debug)]
12pub struct AnyValueWrapper<T: 'static>{
13 value: T
14}
15impl<T: 'static> AnyValueWrapper<T> {
16 #[inline]
17 pub fn new(value: T) -> Self{
18 Self{ value }
19 }
20}
21impl<T: 'static> AnyValueSizeless for AnyValueWrapper<T> {
22 type Type = T;
23
24 #[inline]
25 fn as_bytes_ptr(&self) -> *const u8 {
26 &self.value as *const _ as *const u8
27 }
28}
29impl<T: 'static> AnyValueSizelessMut for AnyValueWrapper<T> {
30 #[inline]
31 fn as_bytes_mut_ptr(&mut self) -> *mut u8 {
32 &mut self.value as *mut _ as *mut u8
33 }
34}
35impl<T: 'static> AnyValueTypeless for AnyValueWrapper<T> {
36 #[inline]
37 fn size(&self) -> usize {
38 size_of::<T>()
39 }
40}
41impl<T: 'static> AnyValue for AnyValueWrapper<T> {
42 #[inline]
43 fn value_typeid(&self) -> TypeId {
44 TypeId::of::<T>()
45 }
46}
47impl<T: 'static> AnyValueTypelessMut for AnyValueWrapper<T> {}
48impl<T: 'static> AnyValueMut for AnyValueWrapper<T> {}