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