use std::time::Duration;
use super::duration_string::DurationString;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct Timeout(Duration);
impl DurationString for Timeout {
fn duration(&self) -> &Duration {
&self.0
}
}
impl From<Duration> for Timeout {
fn from(value: Duration) -> Self {
Self(value)
}
}
impl Default for Timeout {
fn default() -> Self {
TIMEOUT_DEFAULT
}
}
impl std::fmt::Display for Timeout {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(&DurationString::to_string(self))
}
}
const TIMEOUT_DEFAULT: Timeout = Timeout(Duration::from_secs(30));
#[cfg(test)]
mod tests {
use std::time::Duration;
use super::Timeout;
#[test]
fn display_test() {
assert_eq!(&Timeout::default().to_string(), "30s");
assert_eq!(
&Timeout::from(Duration::from_millis(1_001)).to_string(),
"1s1ms"
);
}
}