byte_unit/byte/adjusted/
serde_traits.rs1use alloc::format;
2use core::{
3 fmt::{self, Formatter},
4 str::FromStr,
5};
6
7use serde::{
8 self,
9 de::{Error as DeError, Visitor},
10 Deserialize, Deserializer, Serialize, Serializer,
11};
12
13use super::AdjustedByte;
14
15impl Serialize for AdjustedByte {
16 #[inline]
17 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
18 where
19 S: Serializer, {
20 if serializer.is_human_readable() {
21 serializer.serialize_str(format!("{:#}", self).as_str())
22 } else {
23 serializer.serialize_str(format!("{:-#}", self).as_str())
24 }
25 }
26}
27
28impl<'de> Deserialize<'de> for AdjustedByte {
29 #[inline]
30 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
31 where
32 D: Deserializer<'de>, {
33 struct MyVisitor;
34
35 impl<'de> Visitor<'de> for MyVisitor {
36 type Value = AdjustedByte;
37
38 #[inline]
39 fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result {
40 f.write_str("a string such as \"123\", \"123KiB\", \"50.84 MB\"")
41 }
42
43 #[inline]
44 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
45 where
46 E: DeError, {
47 AdjustedByte::from_str(v).map_err(DeError::custom)
48 }
49 }
50
51 deserializer.deserialize_str(MyVisitor)
52 }
53}