1#[cfg(feature = "alloc")]
2use alloc::{string::String, vec::Vec};
3
4pub trait Clear {
6 fn clear(&mut self);
8}
9
10impl<T> Clear for &mut T
11where
12 T: Clear,
13{
14 #[inline]
15 fn clear(&mut self) {
16 (*self).clear();
17 }
18}
19
20impl Clear for () {
21 #[inline]
22 fn clear(&mut self) {}
23}
24
25impl<T> Clear for Option<T> {
31 #[inline]
32 fn clear(&mut self) {
33 *self = None;
34 }
35}
36
37#[cfg(feature = "alloc")]
43impl Clear for String {
44 #[inline]
45 fn clear(&mut self) {
46 self.clear();
47 }
48}
49
50#[cfg(feature = "alloc")]
56impl<T> Clear for Vec<T> {
57 #[inline]
58 fn clear(&mut self) {
59 self.clear();
60 }
61}
62
63#[cfg(feature = "arrayvec")]
69impl<const N: usize> Clear for arrayvec::ArrayString<N> {
70 #[inline]
71 fn clear(&mut self) {
72 self.clear();
73 }
74}
75
76#[cfg(feature = "arrayvec")]
82impl<T, const N: usize> Clear for arrayvec::ArrayVec<T, N> {
83 #[inline]
84 fn clear(&mut self) {
85 self.clear();
86 }
87}
88
89#[cfg(feature = "smallvec")]
95impl<A> Clear for smallvec::SmallVec<A>
96where
97 A: smallvec::Array,
98{
99 #[inline]
100 fn clear(&mut self) {
101 self.clear();
102 }
103}
104
105#[cfg(feature = "tinyvec")]
111impl<A> Clear for tinyvec::ArrayVec<A>
112where
113 A: tinyvec::Array,
114 A::Item: Default,
115{
116 #[inline]
117 fn clear(&mut self) {
118 self.clear();
119 }
120}
121
122#[cfg(all(feature = "alloc", feature = "tinyvec"))]
128impl<A> Clear for tinyvec::TinyVec<A>
129where
130 A: tinyvec::Array,
131 A::Item: Default,
132{
133 #[inline]
134 fn clear(&mut self) {
135 self.clear();
136 }
137}