zerovec/
zerofrom_impls.rs
1#[cfg(feature = "alloc")]
6use crate::map::ZeroMapKV;
7use crate::ule::*;
8use crate::vecs::VarZeroVecFormat;
9use crate::{VarZeroSlice, VarZeroVec, ZeroSlice, ZeroVec};
10#[cfg(feature = "alloc")]
11use crate::{ZeroMap, ZeroMap2d};
12use zerofrom::ZeroFrom;
13
14impl<'zf, T> ZeroFrom<'zf, ZeroVec<'_, T>> for ZeroVec<'zf, T>
15where
16 T: 'static + AsULE,
17{
18 #[inline]
19 fn zero_from(other: &'zf ZeroVec<'_, T>) -> Self {
20 ZeroVec::new_borrowed(other.as_ule_slice())
21 }
22}
23
24impl<'zf, T> ZeroFrom<'zf, ZeroSlice<T>> for ZeroVec<'zf, T>
25where
26 T: 'static + AsULE,
27{
28 #[inline]
29 fn zero_from(other: &'zf ZeroSlice<T>) -> Self {
30 ZeroVec::new_borrowed(other.as_ule_slice())
31 }
32}
33
34impl<'zf, T> ZeroFrom<'zf, ZeroSlice<T>> for &'zf ZeroSlice<T>
35where
36 T: 'static + AsULE,
37{
38 #[inline]
39 fn zero_from(other: &'zf ZeroSlice<T>) -> Self {
40 other
41 }
42}
43
44impl<'zf, T, F: VarZeroVecFormat> ZeroFrom<'zf, VarZeroSlice<T, F>> for VarZeroVec<'zf, T, F>
45where
46 T: 'static + VarULE + ?Sized,
47{
48 #[inline]
49 fn zero_from(other: &'zf VarZeroSlice<T, F>) -> Self {
50 other.into()
51 }
52}
53
54impl<'zf, T, F: VarZeroVecFormat> ZeroFrom<'zf, VarZeroVec<'_, T, F>> for VarZeroVec<'zf, T, F>
55where
56 T: 'static + VarULE + ?Sized,
57{
58 #[inline]
59 fn zero_from(other: &'zf VarZeroVec<'_, T, F>) -> Self {
60 other.as_slice().into()
61 }
62}
63
64impl<'zf, T> ZeroFrom<'zf, VarZeroSlice<T>> for &'zf VarZeroSlice<T>
65where
66 T: 'static + VarULE + ?Sized,
67{
68 #[inline]
69 fn zero_from(other: &'zf VarZeroSlice<T>) -> Self {
70 other
71 }
72}
73
74#[cfg(feature = "alloc")]
75impl<'zf, 's, K, V> ZeroFrom<'zf, ZeroMap<'s, K, V>> for ZeroMap<'zf, K, V>
76where
77 K: 'static + for<'b> ZeroMapKV<'b> + ?Sized,
78 V: 'static + for<'b> ZeroMapKV<'b> + ?Sized,
79 <K as ZeroMapKV<'zf>>::Container: ZeroFrom<'zf, <K as ZeroMapKV<'s>>::Container>,
80 <V as ZeroMapKV<'zf>>::Container: ZeroFrom<'zf, <V as ZeroMapKV<'s>>::Container>,
81{
82 fn zero_from(other: &'zf ZeroMap<'s, K, V>) -> Self {
83 ZeroMap {
84 keys: K::Container::zero_from(&other.keys),
85 values: V::Container::zero_from(&other.values),
86 }
87 }
88}
89
90#[cfg(feature = "alloc")]
91impl<'zf, 's, K0, K1, V> ZeroFrom<'zf, ZeroMap2d<'s, K0, K1, V>> for ZeroMap2d<'zf, K0, K1, V>
92where
93 K0: 'static + for<'b> ZeroMapKV<'b> + ?Sized,
94 K1: 'static + for<'b> ZeroMapKV<'b> + ?Sized,
95 V: 'static + for<'b> ZeroMapKV<'b> + ?Sized,
96 <K0 as ZeroMapKV<'zf>>::Container: ZeroFrom<'zf, <K0 as ZeroMapKV<'s>>::Container>,
97 <K1 as ZeroMapKV<'zf>>::Container: ZeroFrom<'zf, <K1 as ZeroMapKV<'s>>::Container>,
98 <V as ZeroMapKV<'zf>>::Container: ZeroFrom<'zf, <V as ZeroMapKV<'s>>::Container>,
99{
100 fn zero_from(other: &'zf ZeroMap2d<'s, K0, K1, V>) -> Self {
101 ZeroMap2d {
102 keys0: K0::Container::zero_from(&other.keys0),
103 joiner: ZeroVec::zero_from(&other.joiner),
104 keys1: K1::Container::zero_from(&other.keys1),
105 values: V::Container::zero_from(&other.values),
106 }
107 }
108}