ibc_primitives/utils/
pretty.rs

1//! Pretty printing utilities.
2
3use core::fmt::{Display, Error as FmtError, Formatter};
4
5/// A slice type that implements the `Display` trait to pretty-print the contained elements.
6pub struct PrettySlice<'a, T>(pub &'a [T]);
7
8impl<T: Display> Display for PrettySlice<'_, T> {
9    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), FmtError> {
10        write!(f, "[ ")?;
11        let mut vec_iterator = self.0.iter().peekable();
12        while let Some(element) = vec_iterator.next() {
13            write!(f, "{element}")?;
14            // If it is not the last element, add separator.
15            if vec_iterator.peek().is_some() {
16                write!(f, ", ")?;
17            }
18        }
19        write!(f, " ]")
20    }
21}
22
23#[cfg(test)]
24mod tests {
25    use super::*;
26    use crate::prelude::*;
27
28    #[test]
29    fn test_pretty_vec_display() {
30        let expected_output = "[ one, two, three ]";
31
32        let string_vec = vec!["one", "two", "three"];
33        let pretty_vec = PrettySlice(&string_vec);
34
35        assert_eq!(pretty_vec.to_string(), expected_output);
36    }
37
38    #[test]
39    fn test_pretty_vec_empty_vec() {
40        let expected_output = "[  ]";
41
42        let string_vec: Vec<String> = vec![];
43        let pretty_vec = PrettySlice(&string_vec);
44
45        assert_eq!(pretty_vec.to_string(), expected_output);
46    }
47
48    #[test]
49    fn test_pretty_vec_single_element() {
50        let expected_output = "[ one ]";
51
52        let string_vec = vec!["one"];
53        let pretty_vec = PrettySlice(&string_vec);
54
55        assert_eq!(pretty_vec.to_string(), expected_output);
56    }
57}