padded_number/
display.rs

1use super::*;
2
3impl<const A: u8, const B: u8> std::fmt::Debug for PaddedNumber<A, B> {
4    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
5        if self.is_empty() {
6            return Ok(());
7        }
8
9        let mut string = ['0'].repeat(self.leading_zeros as usize).iter().collect::<String>();
10
11        if self.number != 0 {
12            string.push_str(&self.number.to_string());
13        }
14
15        f.write_str(&string)
16    }
17}
18
19impl<const A: u8, const B: u8> std::fmt::Display for PaddedNumber<A, B> {
20    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21        write!(f, "{:?}", self)
22    }
23}
24
25#[cfg(test)]
26mod tests {
27    use crate::tests::mock_from_str;
28
29    #[test]
30    fn debug_print() {
31        let expected_dbg_str = "0123";
32        let number = mock_from_str::<1, 4>(expected_dbg_str);
33        let actual_dbg_str = format!("{:?}", number);
34
35        assert_eq!(expected_dbg_str, &actual_dbg_str);
36    }
37
38    #[test]
39    fn display_print() {
40        let expected_display_str = "0012";
41        let number = mock_from_str::<1, 4>(expected_display_str);
42        let actual_display_str = format!("{}", number);
43
44        assert_eq!(expected_display_str, &actual_display_str);
45    }
46
47    #[test]
48    fn display_empty() {
49        let expected_display_str = "";
50        let number = mock_from_str::<0, 0>("");
51        let actual_display_str = format!("{}", number);
52
53        assert_eq!(expected_display_str, &actual_display_str);
54    }
55
56    #[test]
57    fn display_leading_zeros_only() {
58        let expected_display_str = "00";
59        let number = mock_from_str::<2, 2>("00");
60        let actual_display_str = format!("{}", number);
61
62        assert_eq!(expected_display_str, &actual_display_str);
63    }
64}