1use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet, VecDeque};
5
6use crate::{Commonality, TotalBTreeMap, TotalHashMap};
7
8pub struct EmptyCommonality(());
16
17macro_rules! impl_empty {
18 ({$($generics:tt)*}, $Coll:path $(,)?) => {
19 impl<$($generics)*> Commonality<$Coll> for EmptyCommonality {
20 fn common() -> $Coll {
21 Default::default()
22 }
23 fn is_common(value: &$Coll) -> bool {
24 value.is_empty()
25 }
26 }
27 };
28}
29
30impl_empty!({ T }, Vec<T>);
31impl_empty!({ T }, VecDeque<T>);
32impl_empty!({ T }, HashSet<T>);
33impl_empty!({ K, V }, HashMap<K, V>);
34impl_empty!({ T }, BTreeSet<T>);
35impl_empty!({ K, V }, BTreeMap<K, V>);
36impl_empty!({ K, V, C: Commonality<V> }, TotalHashMap<K, V, C>);
37impl_empty!({ K, V, C: Commonality<V> }, TotalBTreeMap<K, V, C>);