timber_rust/config/
duration.rs1use serde::{Deserialize, Serialize};
2use std::time::Duration;
3
4#[derive(Copy, Clone, Debug, Serialize, Deserialize)]
5pub enum FlexibleDuration {
6 Seconds(u64),
7 DecimalSeconds(f64),
8 SecondsNanoseconds(u64, u32),
9}
10
11impl From<FlexibleDuration> for Duration {
12 fn from(value: FlexibleDuration) -> Self {
13 match value {
14 FlexibleDuration::Seconds(seconds) => Duration::new(seconds, 0),
15 FlexibleDuration::DecimalSeconds(seconds) => {
16 let secs = seconds.floor() as u64;
17 let nsecs = (seconds.fract() * 1e9) as u32;
18 Duration::new(secs, nsecs)
19 }
20 FlexibleDuration::SecondsNanoseconds(secs, nsecs) => Duration::new(secs, nsecs),
21 }
22 }
23}
24
25impl From<Duration> for FlexibleDuration {
26 fn from(value: Duration) -> Self {
27 FlexibleDuration::SecondsNanoseconds(value.as_secs(), value.subsec_nanos())
28 }
29}