1pub mod as_str {
2 use serde::{de, Deserialize, Deserializer, Serializer};
3 use std::{fmt::Display, str::FromStr};
4
5 pub fn deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error>
6 where
7 T: FromStr,
8 T::Err: Display,
9 D: Deserializer<'de>,
10 {
11 let s = String::deserialize(deserializer)?;
12 T::from_str(&s).map_err(de::Error::custom)
13 }
14
15 pub fn serialize<S, T>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
16 where
17 S: Serializer,
18 T: Display,
19 {
20 serializer.serialize_str(&value.to_string())
21 }
22}
23
24pub mod as_str_vec {
25 use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
26 use std::{fmt::Display, str::FromStr};
27
28 pub fn deserialize<'de, T, D>(deserializer: D) -> Result<Vec<T>, D::Error>
29 where
30 T: FromStr,
31 T::Err: Display,
32 D: Deserializer<'de>,
33 {
34 let vec_of_strings: Vec<String> = Vec::deserialize(deserializer)?;
35 vec_of_strings
36 .into_iter()
37 .map(|s| T::from_str(&s).map_err(de::Error::custom))
38 .collect()
39 }
40
41 pub fn serialize<S, T>(values: &[T], serializer: S) -> Result<S::Ok, S::Error>
42 where
43 S: Serializer,
44 T: Display,
45 {
46 let vec_of_strings: Vec<String> = values.iter().map(|value| value.to_string()).collect();
47 vec_of_strings.serialize(serializer)
48 }
49}
50
51pub mod as_base64_encoded_string {
52 use cosmwasm_std::Binary;
53 use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
54
55 pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
56 where
57 D: Deserializer<'de>,
58 {
59 let encoded_string = String::deserialize(deserializer)?;
60 Binary::from_base64(&encoded_string)
61 .map(|b| b.to_vec())
62 .map_err(de::Error::custom)
63 }
64
65 pub fn serialize<S>(values: &[u8], serializer: S) -> Result<S::Ok, S::Error>
66 where
67 S: Serializer,
68 {
69 Binary(values.to_vec()).to_base64().serialize(serializer)
70 }
71}
72
73pub mod as_option_base64_encoded_string {
74 use cosmwasm_std::Binary;
75 use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
76
77 pub fn deserialize<'de, D>(deserializer: D) -> Result<Option<Vec<u8>>, D::Error>
78 where
79 D: Deserializer<'de>,
80 {
81 let encoded_string: Option<String> = Option::deserialize(deserializer)?;
82 match encoded_string {
83 Some(s) => Binary::from_base64(&s)
84 .map(|b| Some(b.to_vec()))
85 .map_err(de::Error::custom),
86 None => Ok(None),
87 }
88 }
89
90 pub fn serialize<S>(value: &Option<Vec<u8>>, serializer: S) -> Result<S::Ok, S::Error>
91 where
92 S: Serializer,
93 {
94 match value {
95 Some(vec) => {
96 let encoded_string = Binary(vec.clone()).to_base64();
97 encoded_string.serialize(serializer)
98 }
99 None => serializer.serialize_none(),
100 }
101 }
102}