rcc_cosmos/proto_wrapper/
serde_helper.rs

1use base64;
2
3pub fn from_base64(s: &str) -> Result<Vec<u8>, Box<dyn std::error::Error + Send + Sync>> {
4    base64::decode(s).map_err(|err| err.into())
5}
6
7pub fn to_base64<T: AsRef<[u8]>>(input: T) -> String {
8    base64::encode(&input)
9}
10
11pub mod base64_format {
12    use serde::de;
13    use serde::{Deserialize, Deserializer, Serializer};
14
15    use super::{from_base64, to_base64};
16
17    pub fn serialize<S, T>(data: T, serializer: S) -> Result<S::Ok, S::Error>
18        where
19            S: Serializer,
20            T: AsRef<[u8]>,
21    {
22        serializer.serialize_str(&to_base64(data))
23    }
24
25    pub fn deserialize<'de, D, T>(deserializer: D) -> Result<T, D::Error>
26        where
27            D: Deserializer<'de>,
28            T: From<Vec<u8>>,
29    {
30        let s = String::deserialize(deserializer)?;
31        from_base64(&s).map_err(|err| de::Error::custom(err.to_string())).map(Into::into)
32    }
33}