cosmic_files/sequencing/
serde_helpers.rs1pub mod u8_btree_map {
2 use serde::{Deserialize, Deserializer, Serialize, Serializer};
3 use std::collections::BTreeMap;
4
5 pub fn serialize<S, V: Serialize>(map: &BTreeMap<u8, V>, s: S) -> Result<S::Ok, S::Error>
6 where
7 S: Serializer,
8 {
9 let pairs: Vec<(u8, &V)> = map.iter().map(|(k, v)| (*k, v)).collect();
10 pairs.serialize(s)
11 }
12
13 pub fn deserialize<'de, D, V: Deserialize<'de>>(d: D) -> Result<BTreeMap<u8, V>, D::Error>
14 where
15 D: Deserializer<'de>,
16 {
17 let pairs: Vec<(u8, V)> = Vec::deserialize(d)?;
18 Ok(pairs.into_iter().collect())
19 }
20}
21
22pub mod option_systemtime_secs {
23 use serde::{Deserialize, Deserializer, Serializer};
24 use std::time::{Duration, SystemTime, UNIX_EPOCH};
25
26 pub fn serialize<S: Serializer>(t: &Option<SystemTime>, s: S) -> Result<S::Ok, S::Error> {
27 match t {
28 None => s.serialize_none(),
29 Some(st) => {
30 let secs = st.duration_since(UNIX_EPOCH).unwrap_or_default().as_secs();
31 s.serialize_some(&secs)
32 }
33 }
34 }
35
36 pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result<Option<SystemTime>, D::Error> {
37 let opt: Option<u64> = Option::deserialize(d)?;
38 Ok(opt.map(|secs| UNIX_EPOCH + Duration::from_secs(secs)))
39 }
40}