Skip to content

Commit 42cfbae

Browse files
committed
feat: add Duration serialization module
1 parent ea4d9a6 commit 42cfbae

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

.extras/snippets/general.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,25 @@ fn substitute<'a: 'b, 'b>(str: &'a str, var: &str, val: &str) -> Cow<'b, str> {
1414
let format = format!(r"\{{\{{[[:space:]]*{}[[:space:]]*\}}\}}", var);
1515
Regex::new(&format).unwrap().replace_all(str, val)
1616
}
17+
18+
/// Serialize and deserialize `std::time::Duration` as human-readable seconds.
19+
mod human_duration {
20+
use std::time::Duration;
21+
22+
use serde::{Deserialize, Deserializer, Serialize, Serializer};
23+
24+
pub fn serialize<S>(duration: &Duration, serializer: S) -> Result<S::Ok, S::Error>
25+
where
26+
S: Serializer,
27+
{
28+
duration.as_secs().serialize(serializer)
29+
}
30+
31+
pub fn deserialize<'de, D>(deserializer: D) -> Result<Duration, D::Error>
32+
where
33+
D: Deserializer<'de>,
34+
{
35+
let secs = u64::deserialize(deserializer)?;
36+
Ok(Duration::from_secs(secs))
37+
}
38+
}

0 commit comments

Comments
 (0)