sword_core/config/
utils.rs1use byte_unit::Byte;
2use duration_str::parse as parse_duration;
3use serde::{Deserialize, Serialize};
4use std::str::FromStr;
5use std::time::Duration;
6
7#[derive(Debug, Clone, Serialize)]
18pub struct TimeConfig {
19 pub parsed: Duration,
20 pub raw: String,
21}
22
23impl<'de> Deserialize<'de> for TimeConfig {
24 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
25 where
26 D: serde::Deserializer<'de>,
27 {
28 use serde::de::Error;
29
30 let raw = String::deserialize(deserializer)?;
31 let parsed = parse_duration(&raw).map_err(Error::custom)?;
32
33 Ok(TimeConfig { parsed, raw })
34 }
35}
36
37#[derive(Debug, Clone, Serialize)]
48pub struct ByteConfig {
49 pub parsed: usize,
50 pub raw: String,
51}
52
53impl<'de> Deserialize<'de> for ByteConfig {
54 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
55 where
56 D: serde::Deserializer<'de>,
57 {
58 use serde::de::Error;
59
60 let raw = String::deserialize(deserializer)?;
61 let byte = Byte::from_str(&raw).map_err(Error::custom)?;
62 let parsed = byte.as_u64() as usize;
63
64 Ok(ByteConfig { parsed, raw })
65 }
66}