starknet_core/serde/
byte_array.rs1pub mod base64 {
3 use alloc::{fmt::Formatter, format, vec::*};
4
5 use base64::{engine::general_purpose::STANDARD, Engine};
6 use serde::{de::Visitor, Deserializer, Serializer};
7
8 struct Base64Visitor;
9
10 pub fn serialize<S, T>(value: T, serializer: S) -> Result<S::Ok, S::Error>
12 where
13 S: Serializer,
14 T: AsRef<Vec<u8>>,
15 {
16 serializer.serialize_str(&STANDARD.encode(value.as_ref()))
17 }
18
19 pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
21 where
22 D: Deserializer<'de>,
23 {
24 deserializer.deserialize_any(Base64Visitor)
25 }
26
27 impl Visitor<'_> for Base64Visitor {
28 type Value = Vec<u8>;
29
30 fn expecting(&self, formatter: &mut Formatter<'_>) -> alloc::fmt::Result {
31 write!(formatter, "string")
32 }
33
34 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
35 where
36 E: serde::de::Error,
37 {
38 STANDARD
39 .decode(v)
40 .map_err(|err| serde::de::Error::custom(format!("invalid base64 string: {err}")))
41 }
42 }
43}