use std::fmt::{self, Debug, Formatter, Write};
use std::time::{Duration, SystemTimeError};
#[derive(Clone, Eq, PartialEq)]
pub struct SignedDuration {
pub positive: bool,
pub duration: Duration,
}
impl From<Duration> for SignedDuration {
fn from(duration: Duration) -> Self {
SignedDuration {
positive: true,
duration,
}
}
}
impl From<Result<Duration, SystemTimeError>> for SignedDuration {
fn from(result: Result<Duration, SystemTimeError>) -> Self {
match result {
Ok(duration) => duration.into(),
Err(err) => SignedDuration {
positive: false,
duration: err.duration(),
},
}
}
}
impl Debug for SignedDuration {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
if !self.positive {
f.write_char('-')?;
}
self.duration.fmt(f)
}
}