ts_bart/node/
child_storage.rs1use alloc::boxed::Box;
2
3pub trait Storage {
13 type Container<T>;
15
16 fn new<T>(t: T) -> Self::Container<T>;
18 fn into_inner<T>(container: Self::Container<T>) -> T;
20 fn as_ref<T>(container: &Self::Container<T>) -> &T;
22 fn as_mut<T>(container: &mut Self::Container<T>) -> &mut T;
24 fn clone<T>(container: &Self::Container<T>) -> Self::Container<T>
26 where
27 T: Clone;
28}
29
30#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
32pub enum InlineStorage {}
33
34#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
47pub enum BoxStorage {}
48
49impl Storage for InlineStorage {
50 type Container<T> = T;
51
52 #[inline]
53 fn new<T>(t: T) -> Self::Container<T> {
54 t
55 }
56
57 #[inline]
58 fn into_inner<T>(container: Self::Container<T>) -> T {
59 container
60 }
61
62 #[inline]
63 fn as_ref<T>(container: &Self::Container<T>) -> &T {
64 container
65 }
66
67 #[inline]
68 fn as_mut<T>(container: &mut Self::Container<T>) -> &mut T {
69 container
70 }
71
72 #[inline]
73 fn clone<T>(container: &Self::Container<T>) -> Self::Container<T>
74 where
75 T: Clone,
76 {
77 container.clone()
78 }
79}
80
81impl Storage for BoxStorage {
82 type Container<T> = Box<T>;
83
84 #[inline]
85 fn new<T>(t: T) -> Self::Container<T> {
86 Box::new(t)
87 }
88
89 #[inline]
90 fn into_inner<T>(container: Self::Container<T>) -> T {
91 *container
92 }
93
94 #[inline]
95 fn as_ref<T>(container: &Self::Container<T>) -> &T {
96 container.as_ref()
97 }
98
99 #[inline]
100 fn as_mut<T>(container: &mut Self::Container<T>) -> &mut T {
101 container.as_mut()
102 }
103
104 #[inline]
105 fn clone<T>(container: &Self::Container<T>) -> Self::Container<T>
106 where
107 T: Clone,
108 {
109 container.clone()
110 }
111}