fedimint_core/encoding/
as_base64.rs1use 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}