dfir_rs/util/
clear.rs
1use std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, LinkedList, VecDeque};
4use std::ffi::OsString;
5
6pub trait Clear {
9 fn clear(&mut self);
11}
12
13#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
15pub struct ClearDefault<T>(pub T)
16where
17 T: Default;
18impl<T> Default for ClearDefault<T>
19where
20 T: Default,
21{
22 fn default() -> Self {
23 Self(Default::default())
24 }
25}
26impl<T> Clear for ClearDefault<T>
27where
28 T: Default,
29{
30 fn clear(&mut self) {
31 *self = ClearDefault(Default::default());
32 }
33}
34
35macro_rules! clear_impl {
36 (
37 $t:ident $( < $( $g:ident ),* > )?
38 ) => {
39 impl $( < $( $g ),* > )? Clear for $t $( < $( $g ),* > )? {
40 fn clear(&mut self) {
41 self.clear()
42 }
43 }
44 }
45}
46
47clear_impl!(BTreeMap<K, V>);
48clear_impl!(BTreeSet<T>);
49clear_impl!(BinaryHeap<T>);
50clear_impl!(HashMap<K, V, S>);
51clear_impl!(HashSet<T, S>);
52clear_impl!(LinkedList<T>);
53clear_impl!(OsString);
54clear_impl!(String);
55clear_impl!(Vec<T>);
56clear_impl!(VecDeque<T>);
57
58impl<T> Clear for Option<T> {
59 fn clear(&mut self) {
60 *self = None;
61 }
62}