use std::time::Duration;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct ResponseTimeout(Duration);
impl ResponseTimeout {
#[must_use]
pub fn new(duration: Duration) -> Self {
Self(duration)
}
#[must_use]
pub fn duration(&self) -> Duration {
self.0
}
}
impl From<Duration> for ResponseTimeout {
fn from(duration: Duration) -> Self {
Self::new(duration)
}
}
#[cfg(test)]
#[cfg_attr(coverage_nightly, coverage(off))]
mod tests {
use super::*;
#[test]
fn new_creates_timeout_with_given_duration() {
let timeout = ResponseTimeout::new(Duration::from_secs(30));
assert_eq!(timeout.duration(), Duration::from_secs(30));
}
#[test]
fn duration_returns_inner_value() {
let timeout = ResponseTimeout::new(Duration::from_millis(500));
assert_eq!(timeout.duration(), Duration::from_millis(500));
}
#[test]
fn from_duration() {
let timeout: ResponseTimeout = Duration::from_secs(10).into();
assert_eq!(timeout.duration(), Duration::from_secs(10));
}
#[test]
fn clone_and_copy() {
let timeout = ResponseTimeout::new(Duration::from_secs(5));
let cloned = timeout;
let copied = timeout;
assert_eq!(timeout, cloned);
assert_eq!(timeout, copied);
}
#[test]
fn debug_formatting() {
let timeout = ResponseTimeout::new(Duration::from_secs(42));
let debug = format!("{timeout:?}");
assert!(debug.contains("ResponseTimeout"));
assert!(debug.contains("42"));
}
}