fedimint_core/encoding/
as_base64.rs

1use base64::Engine as _;
2use base64::engine::general_purpose::URL_SAFE_NO_PAD;
3use serde::Deserialize as _;
4
5use super::{Decodable, Encodable};
6use crate::module::registry::ModuleRegistry;
7
8pub fn serialize<T, S>(t: &T, ser: S) -> Result<S::Ok, S::Error>
9where
10    T: Encodable,
11    S: serde::Serializer,
12{
13    ser.serialize_str(&URL_SAFE_NO_PAD.encode(t.consensus_encode_to_vec()))
14}
15
16pub fn deserialize<'de, T: Decodable, D>(de: D) -> Result<T, D::Error>
17where
18    D: serde::de::Deserializer<'de>,
19{
20    Decodable::consensus_decode_whole(
21        &URL_SAFE_NO_PAD
22            .decode(&String::deserialize(de)?)
23            .map_err(|e| {
24                serde::de::Error::custom(format!("decodable deserialization failed: {e:#}"))
25            })?,
26        &ModuleRegistry::default(),
27    )
28    .map_err(|e| serde::de::Error::custom(format!("decodable deserialization failed: {e:#}")))
29}