use std::time::Duration;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DelayConfig {
duration_secs: u64,
}
impl DelayConfig {
pub fn from_secs(secs: u64) -> Self {
Self {
duration_secs: secs,
}
}
pub fn duration(&self) -> Duration {
Duration::from_secs(self.duration_secs)
}
pub fn duration_secs(&self) -> u64 {
self.duration_secs
}
pub fn is_zero(&self) -> bool {
self.duration_secs == 0
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn delay_config_from_secs() {
let config = DelayConfig::from_secs(300);
assert_eq!(config.duration_secs(), 300);
assert_eq!(config.duration(), Duration::from_secs(300));
assert!(!config.is_zero());
}
#[test]
fn delay_config_zero() {
let config = DelayConfig::from_secs(0);
assert!(config.is_zero());
assert_eq!(config.duration(), Duration::ZERO);
}
#[test]
fn delay_config_serde_roundtrip() {
let config = DelayConfig::from_secs(60);
let json = serde_json::to_string(&config).expect("serialize");
let back: DelayConfig = serde_json::from_str(&json).expect("deserialize");
assert_eq!(config.duration_secs(), back.duration_secs());
}
}