use std::time::Duration;
pub trait EasyDuration: Sized {
fn seconds(self) -> Duration;
fn minutes(self) -> Duration {
self.seconds() * 60
}
fn hours(self) -> Duration {
self.seconds() * 60 * 60
}
fn days(self) -> Duration {
self.seconds() * 60 * 60 * 24
}
}
impl EasyDuration for u8 {
fn seconds(self) -> Duration {
Duration::from_secs(self.into())
}
}
impl EasyDuration for u16 {
fn seconds(self) -> Duration {
Duration::from_secs(self.into())
}
}
impl EasyDuration for u32 {
fn seconds(self) -> Duration {
Duration::from_secs(self.into())
}
}
impl EasyDuration for u64 {
fn seconds(self) -> Duration {
Duration::from_secs(self)
}
}
impl EasyDuration for i8 {
fn seconds(self) -> Duration {
Duration::from_secs(self.unsigned_abs() as u64)
}
}
impl EasyDuration for i16 {
fn seconds(self) -> Duration {
Duration::from_secs(self.unsigned_abs() as u64)
}
}
impl EasyDuration for i32 {
fn seconds(self) -> Duration {
let secs = self.abs().try_into().unwrap();
Duration::from_secs(secs)
}
}
impl EasyDuration for i64 {
fn seconds(self) -> Duration {
let secs = self.abs().try_into().unwrap();
Duration::from_secs(secs)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_easy_duration() {
assert_eq!(1i8.seconds(), Duration::from_secs(1));
assert_eq!(1i16.seconds(), Duration::from_secs(1));
assert_eq!(1i32.seconds(), Duration::from_secs(1));
assert_eq!(1i64.seconds(), Duration::from_secs(1));
assert_eq!(1u8.seconds(), Duration::from_secs(1));
assert_eq!(1u16.seconds(), Duration::from_secs(1));
assert_eq!(1u32.seconds(), Duration::from_secs(1));
assert_eq!(1u64.seconds(), Duration::from_secs(1));
assert_eq!(1i8.minutes(), Duration::from_secs(60));
assert_eq!(1i16.minutes(), Duration::from_secs(60));
assert_eq!(1i32.minutes(), Duration::from_secs(60));
assert_eq!(1i64.minutes(), Duration::from_secs(60));
assert_eq!(1u8.minutes(), Duration::from_secs(60));
assert_eq!(1u16.minutes(), Duration::from_secs(60));
assert_eq!(1u32.minutes(), Duration::from_secs(60));
assert_eq!(1u64.minutes(), Duration::from_secs(60));
assert_eq!(1i8.hours(), Duration::from_secs(60 * 60));
assert_eq!(1i16.hours(), Duration::from_secs(60 * 60));
assert_eq!(1i32.hours(), Duration::from_secs(60 * 60));
assert_eq!(1i64.hours(), Duration::from_secs(60 * 60));
assert_eq!(1u8.hours(), Duration::from_secs(60 * 60));
assert_eq!(1u16.hours(), Duration::from_secs(60 * 60));
assert_eq!(1u32.hours(), Duration::from_secs(60 * 60));
assert_eq!(1u64.hours(), Duration::from_secs(60 * 60));
assert_eq!(1i8.days(), Duration::from_secs(60 * 60 * 24));
assert_eq!(1i16.days(), Duration::from_secs(60 * 60 * 24));
assert_eq!(1i32.days(), Duration::from_secs(60 * 60 * 24));
assert_eq!(1i64.days(), Duration::from_secs(60 * 60 * 24));
assert_eq!(1u8.days(), Duration::from_secs(60 * 60 * 24));
assert_eq!(1u16.days(), Duration::from_secs(60 * 60 * 24));
assert_eq!(1u32.days(), Duration::from_secs(60 * 60 * 24));
assert_eq!(1u64.days(), Duration::from_secs(60 * 60 * 24));
}
}