1use core::fmt;
5
6use crate::divide::div_rem;
7use crate::{Duration, Instant, NANOS_PER_SEC};
8
9impl fmt::Debug for Duration {
10 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
11 write_nanos(f, "Duration", self.as_nanos())
12 }
13}
14
15impl fmt::Debug for Instant {
16 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
17 write_nanos(f, "Instant", self.as_nanos())
18 }
19}
20
21fn write_nanos(f: &mut fmt::Formatter<'_>, name: &str, nanos: u64) -> fmt::Result {
27 let (upper, low) = div_rem(nanos, NANOS_PER_SEC);
28 let (high, middle) = div_rem(upper, NANOS_PER_SEC);
29 let (high, middle, low) = (high as u32, middle as u32, low as u32);
32 if high != 0 {
33 write!(f, "{name}({high}{middle:09}{low:09}ns)")
34 } else if middle != 0 {
35 write!(f, "{name}({middle}{low:09}ns)")
36 } else {
37 write!(f, "{name}({low}ns)")
38 }
39}