Skip to main content

bowline_client/
codec.rs

1pub mod base64 {
2    use base64::engine::general_purpose::STANDARD;
3    use base64::Engine;
4    use serde::{Deserialize, Deserializer, Serialize, Serializer};
5
6    pub fn serialize<S: Serializer>(v: &[u8], s: S) -> Result<S::Ok, S::Error> {
7        STANDARD.encode(v).serialize(s)
8    }
9
10    pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result<Vec<u8>, D::Error> {
11        let text = String::deserialize(d)?;
12        STANDARD.decode(text).map_err(serde::de::Error::custom)
13    }
14}
15
16pub mod base64_option {
17    use base64::engine::general_purpose::STANDARD;
18    use base64::Engine;
19    use serde::{Deserialize, Deserializer, Serialize, Serializer};
20
21    pub fn serialize<S: Serializer>(v: &Option<Vec<u8>>, s: S) -> Result<S::Ok, S::Error> {
22        v.as_ref().map(|b| STANDARD.encode(b)).serialize(s)
23    }
24
25    pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result<Option<Vec<u8>>, D::Error> {
26        match Option::<String>::deserialize(d)? {
27            Some(text) => STANDARD
28                .decode(text)
29                .map(Some)
30                .map_err(serde::de::Error::custom),
31            None => Ok(None),
32        }
33    }
34}
35
36pub mod string_int {
37    use serde::{Deserialize, Deserializer, Serialize, Serializer};
38
39    pub fn serialize<S: Serializer>(v: &i64, s: S) -> Result<S::Ok, S::Error> {
40        v.to_string().serialize(s)
41    }
42
43    pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result<i64, D::Error> {
44        let text = String::deserialize(d)?;
45        text.parse().map_err(serde::de::Error::custom)
46    }
47}
48
49pub mod string_int_option {
50    use serde::{Deserialize, Deserializer, Serialize, Serializer};
51
52    pub fn serialize<S: Serializer>(v: &Option<i64>, s: S) -> Result<S::Ok, S::Error> {
53        v.map(|n| n.to_string()).serialize(s)
54    }
55
56    pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result<Option<i64>, D::Error> {
57        match Option::<String>::deserialize(d)? {
58            Some(text) => text.parse().map(Some).map_err(serde::de::Error::custom),
59            None => Ok(None),
60        }
61    }
62}
63
64pub mod string_uint {
65    use serde::{Deserialize, Deserializer, Serialize, Serializer};
66
67    pub fn serialize<S: Serializer>(v: &u64, s: S) -> Result<S::Ok, S::Error> {
68        v.to_string().serialize(s)
69    }
70
71    pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result<u64, D::Error> {
72        let text = String::deserialize(d)?;
73        text.parse().map_err(serde::de::Error::custom)
74    }
75}
76
77pub mod string_uint_option {
78    use serde::{Deserialize, Deserializer, Serialize, Serializer};
79
80    pub fn serialize<S: Serializer>(v: &Option<u64>, s: S) -> Result<S::Ok, S::Error> {
81        v.map(|n| n.to_string()).serialize(s)
82    }
83
84    pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result<Option<u64>, D::Error> {
85        match Option::<String>::deserialize(d)? {
86            Some(text) => text.parse().map(Some).map_err(serde::de::Error::custom),
87            None => Ok(None),
88        }
89    }
90}