1use crate::copy_value::*;
2use crate::elem::*;
3#[cfg(feature = "traits")]
4use crate::slice::*;
5use crate::slice_copy::*;
6#[cfg(feature = "traits")]
7use crate::value::*;
8use crate::vec_copy::*;
9use crate::vtable::*;
10
11#[cfg(feature = "traits")]
12use crate::traits::*;
13
14#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
18pub struct Meta<V> {
19 pub elem: ElemInfo,
20 pub vtable: V,
21}
22
23#[cfg(feature = "traits")]
24impl<'a, V: HasDrop> From<ValueRef<'a, V>> for Meta<VTableRef<'a, V>> {
25 #[inline]
26 fn from(val: ValueRef<'a, V>) -> Meta<VTableRef<'a, V>> {
27 Meta {
28 elem: ElemInfo {
29 type_id: val.type_id,
30 size: val.bytes.len() / val.alignment,
31 alignment: val.alignment,
32 },
33 vtable: val.vtable,
34 }
35 }
36}
37
38#[cfg(feature = "traits")]
39impl<'a, V: HasDrop> From<ValueMut<'a, V>> for Meta<VTableRef<'a, V>> {
40 #[inline]
41 fn from(val: ValueMut<'a, V>) -> Meta<VTableRef<'a, V>> {
42 Meta {
43 elem: ElemInfo {
44 type_id: val.type_id,
45 size: val.bytes.len() / val.alignment,
46 alignment: val.alignment,
47 },
48 vtable: val.vtable,
49 }
50 }
51}
52
53impl<'a, V> From<CopyValueRef<'a, V>> for Meta<VTableRef<'a, V>> {
54 #[inline]
55 fn from(val: CopyValueRef<'a, V>) -> Meta<VTableRef<'a, V>> {
56 Meta {
57 elem: ElemInfo {
58 type_id: val.type_id,
59 size: val.bytes.len() / val.alignment,
60 alignment: val.alignment,
61 },
62 vtable: val.vtable,
63 }
64 }
65}
66
67impl<'a, V> From<SliceCopy<'a, V>> for Meta<VTableRef<'a, V>> {
68 #[inline]
69 fn from(slice: SliceCopy<'a, V>) -> Self {
70 Meta {
71 elem: slice.elem,
72 vtable: slice.vtable,
73 }
74 }
75}
76
77impl<'a, V> From<SliceCopyMut<'a, V>> for Meta<VTableRef<'a, V>> {
78 #[inline]
79 fn from(slice: SliceCopyMut<'a, V>) -> Self {
80 Meta {
81 elem: slice.elem,
82 vtable: slice.vtable,
83 }
84 }
85}
86
87#[cfg(feature = "traits")]
88impl<'a, V> From<Slice<'a, V>> for Meta<VTableRef<'a, V>> {
89 #[inline]
90 fn from(slice: Slice<'a, V>) -> Self {
91 Meta::from(slice.data)
92 }
93}
94
95#[cfg(feature = "traits")]
96impl<'a, V> From<SliceMut<'a, V>> for Meta<VTableRef<'a, V>> {
97 #[inline]
98 fn from(slice: SliceMut<'a, V>) -> Self {
99 Meta::from(slice.data)
100 }
101}
102
103impl<'a, V> From<&'a VecCopy<V>> for Meta<VTableRef<'a, V>> {
104 #[inline]
105 fn from(vec: &'a VecCopy<V>) -> Meta<VTableRef<'a, V>> {
106 Meta {
107 elem: vec.data.elem,
108 vtable: VTableRef::Ref(vec.vtable.as_ref()),
109 }
110 }
111}