|
1 | 1 | use std::fmt;
|
2 | 2 | use std::time::SystemTime;
|
3 | 3 |
|
4 |
| -use humantime::{ |
5 |
| - format_rfc3339_micros, format_rfc3339_millis, format_rfc3339_nanos, format_rfc3339_seconds, |
6 |
| -}; |
7 |
| - |
8 | 4 | use crate::fmt::{Formatter, TimestampPrecision};
|
9 | 5 |
|
10 | 6 | impl Formatter {
|
@@ -99,13 +95,40 @@ impl fmt::Debug for Timestamp {
|
99 | 95 |
|
100 | 96 | impl fmt::Display for Timestamp {
|
101 | 97 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
102 |
| - let formatter = match self.precision { |
103 |
| - TimestampPrecision::Seconds => format_rfc3339_seconds, |
104 |
| - TimestampPrecision::Millis => format_rfc3339_millis, |
105 |
| - TimestampPrecision::Micros => format_rfc3339_micros, |
106 |
| - TimestampPrecision::Nanos => format_rfc3339_nanos, |
| 98 | + let Ok(ts) = jiff::Timestamp::try_from(self.time) else { |
| 99 | + return Err(fmt::Error); |
| 100 | + }; |
| 101 | + |
| 102 | + match self.precision { |
| 103 | + TimestampPrecision::Seconds => write!(f, "{ts:.0}"), |
| 104 | + TimestampPrecision::Millis => write!(f, "{ts:.3}"), |
| 105 | + TimestampPrecision::Micros => write!(f, "{ts:.6}"), |
| 106 | + TimestampPrecision::Nanos => write!(f, "{ts:.9}"), |
| 107 | + } |
| 108 | + } |
| 109 | +} |
| 110 | + |
| 111 | +#[cfg(test)] |
| 112 | +mod tests { |
| 113 | + use super::Timestamp; |
| 114 | + use crate::TimestampPrecision; |
| 115 | + |
| 116 | + #[test] |
| 117 | + fn test_display_timestamp() { |
| 118 | + let mut ts = Timestamp { |
| 119 | + time: std::time::SystemTime::UNIX_EPOCH, |
| 120 | + precision: TimestampPrecision::Nanos, |
107 | 121 | };
|
108 | 122 |
|
109 |
| - formatter(self.time).fmt(f) |
| 123 | + assert_eq!("1970-01-01T00:00:00.000000000Z", format!("{ts}")); |
| 124 | + |
| 125 | + ts.precision = TimestampPrecision::Micros; |
| 126 | + assert_eq!("1970-01-01T00:00:00.000000Z", format!("{ts}")); |
| 127 | + |
| 128 | + ts.precision = TimestampPrecision::Millis; |
| 129 | + assert_eq!("1970-01-01T00:00:00.000Z", format!("{ts}")); |
| 130 | + |
| 131 | + ts.precision = TimestampPrecision::Seconds; |
| 132 | + assert_eq!("1970-01-01T00:00:00Z", format!("{ts}")); |
110 | 133 | }
|
111 | 134 | }
|
0 commit comments