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}