toolshed/
impl_debug.rs

1use std::fmt::{self, Debug};
2use crate::list::{List, GrowableList, ListBuilder};
3use crate::map::{Map, BloomMap};
4use crate::set::{Set, BloomSet};
5
6impl<'arena, T> Debug for List<'arena, T>
7where
8    T: Debug,
9{
10    #[inline]
11    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
12        f.debug_list().entries(self.iter()).finish()
13    }
14}
15
16impl<'arena, T> Debug for GrowableList<'arena, T>
17where
18    T: Debug,
19{
20    #[inline]
21    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
22        self.as_list().fmt(f)
23    }
24}
25
26impl<'arena, T> Debug for ListBuilder<'arena, T>
27where
28    T: Debug,
29{
30    #[inline]
31    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
32        self.as_list().fmt(f)
33    }
34}
35
36impl<'arena, K, V> Debug for Map<'arena, K, V>
37where
38    K: Debug,
39    V: Debug + Copy,
40{
41    #[inline]
42    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
43        f.debug_map().entries(self.iter()).finish()
44    }
45}
46
47impl<'arena, K, V> Debug for BloomMap<'arena, K, V>
48where
49    K: Debug,
50    V: Debug + Copy,
51{
52    #[inline]
53    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
54        f.debug_map().entries(self.iter()).finish()
55    }
56}
57
58impl<'arena, I> Debug for Set<'arena, I>
59where
60    I: Debug,
61{
62    #[inline]
63    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
64        f.debug_set().entries(self.iter()).finish()
65    }
66}
67
68impl<'arena, I> Debug for BloomSet<'arena, I>
69where
70    I: Debug,
71{
72    #[inline]
73    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
74        f.debug_set().entries(self.iter()).finish()
75    }
76}
77
78#[cfg(test)]
79mod test {
80    use super::*;
81    use crate::Arena;
82
83    #[test]
84    fn list_debug() {
85        let arena = Arena::new();
86        let list = List::from_iter(&arena, ["doge", "to", "the", "moon!"].iter().cloned());
87
88        let debug = format!("{:?}", list);
89
90        assert_eq!(debug, r#"["doge", "to", "the", "moon!"]"#);
91    }
92
93    #[test]
94    fn map_debug() {
95        let arena = Arena::new();
96        let map = Map::new();
97
98        map.insert(&arena, "foo", 10u64);
99        map.insert(&arena, "bar", 20);
100        map.insert(&arena, "doge", 30);
101
102        let debug = format!("{:?}", map);
103
104        assert_eq!(debug, r#"{"foo": 10, "bar": 20, "doge": 30}"#);
105    }
106
107    #[test]
108    fn bloom_map_debug() {
109        let arena = Arena::new();
110        let map = BloomMap::new();
111
112        map.insert(&arena, "foo", 10u64);
113        map.insert(&arena, "bar", 20);
114        map.insert(&arena, "doge", 30);
115
116        let debug = format!("{:?}", map);
117
118        assert_eq!(debug, r#"{"foo": 10, "bar": 20, "doge": 30}"#);
119    }
120
121    #[test]
122    fn set_debug() {
123        let arena = Arena::new();
124        let set = Set::new();
125
126        set.insert(&arena, "foo");
127        set.insert(&arena, "bar");
128        set.insert(&arena, "doge");
129
130        let debug = format!("{:?}", set);
131
132        assert_eq!(debug, r#"{"foo", "bar", "doge"}"#);
133    }
134
135    #[test]
136    fn bloom_set_debug() {
137        let arena = Arena::new();
138        let set = BloomSet::new();
139
140        set.insert(&arena, "foo");
141        set.insert(&arena, "bar");
142        set.insert(&arena, "doge");
143
144        let debug = format!("{:?}", set);
145
146        assert_eq!(debug, r#"{"foo", "bar", "doge"}"#);
147    }
148}