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}