near_vm_logic/
serde_with.rs1pub mod bytes_as_base64 {
3 use serde::{Deserialize, Deserializer, Serializer};
4
5 pub fn serialize<S>(arr: &Vec<u8>, serializer: S) -> Result<S::Ok, S::Error>
6 where
7 S: Serializer,
8 {
9 serializer.serialize_str(&base64::encode(arr))
10 }
11
12 pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
13 where
14 D: Deserializer<'de>,
15 {
16 let s = String::deserialize(deserializer)?;
17 Ok(base64::decode(&s).expect("Failed to deserialize base64 string"))
18 }
19}
20
21pub mod bytes_as_str {
23 use serde::{Deserialize, Deserializer, Serializer};
24
25 pub fn serialize<S>(arr: &Vec<u8>, serializer: S) -> Result<S::Ok, S::Error>
26 where
27 S: Serializer,
28 {
29 serializer.serialize_str(&String::from_utf8(arr.clone()).unwrap())
30 }
31
32 pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
33 where
34 D: Deserializer<'de>,
35 {
36 let s = String::deserialize(deserializer)?;
37 Ok(s.into_bytes())
38 }
39}
40
41pub mod bytes_as_base58 {
43 use serde::{Deserialize, Deserializer, Serializer};
44
45 pub fn serialize<S>(arr: &Vec<u8>, serializer: S) -> Result<S::Ok, S::Error>
46 where
47 S: Serializer,
48 {
49 serializer.serialize_str(&bs58::encode(arr).into_string())
50 }
51
52 pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
53 where
54 D: Deserializer<'de>,
55 {
56 let s = String::deserialize(deserializer)?;
57 Ok(bs58::decode(s).into_vec().expect("Failed to deserialize base58 string"))
58 }
59}
60
61pub mod vec_bytes_as_str {
63 use std::fmt;
64
65 use serde::de::{SeqAccess, Visitor};
66 use serde::ser::SerializeSeq;
67 use serde::{Deserializer, Serializer};
68
69 pub fn serialize<S>(data: &Vec<Vec<u8>>, serializer: S) -> Result<S::Ok, S::Error>
70 where
71 S: Serializer,
72 {
73 let mut seq = serializer.serialize_seq(Some(data.len()))?;
74 for v in data {
75 seq.serialize_element(&String::from_utf8(v.clone()).unwrap())?;
76 }
77 seq.end()
78 }
79
80 struct VecBytesVisitor;
81
82 impl<'de> Visitor<'de> for VecBytesVisitor {
83 type Value = Vec<Vec<u8>>;
84
85 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
86 formatter.write_str("an array with string in the first element")
87 }
88
89 fn visit_seq<A>(self, mut seq: A) -> Result<Vec<Vec<u8>>, A::Error>
90 where
91 A: SeqAccess<'de>,
92 {
93 let mut vec = Vec::new();
94 while let Some(s) = seq.next_element::<String>()? {
95 vec.push(s.into_bytes());
96 }
97 Ok(vec)
98 }
99 }
100
101 pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<Vec<u8>>, D::Error>
102 where
103 D: Deserializer<'de>,
104 {
105 deserializer.deserialize_seq(VecBytesVisitor {})
106 }
107}
108
109pub mod u128_dec_format {
110 use serde::de;
111 use serde::{Deserialize, Deserializer, Serializer};
112
113 pub fn serialize<S>(num: &u128, serializer: S) -> Result<S::Ok, S::Error>
114 where
115 S: Serializer,
116 {
117 serializer.serialize_str(&format!("{}", num))
118 }
119
120 pub fn deserialize<'de, D>(deserializer: D) -> Result<u128, D::Error>
121 where
122 D: Deserializer<'de>,
123 {
124 let s = String::deserialize(deserializer)?;
125 u128::from_str_radix(&s, 10).map_err(de::Error::custom)
126 }
127}
128
129pub mod u128_dec_format_compatible {
130 use serde::{de, Deserialize, Deserializer};
136
137 pub use super::u128_dec_format::serialize;
138
139 #[derive(Deserialize)]
140 #[serde(untagged)]
141 enum U128 {
142 Number(u64),
143 String(String),
144 }
145
146 pub fn deserialize<'de, D>(deserializer: D) -> Result<u128, D::Error>
147 where
148 D: Deserializer<'de>,
149 {
150 match U128::deserialize(deserializer)? {
151 U128::Number(value) => Ok(u128::from(value)),
152 U128::String(value) => u128::from_str_radix(&value, 10).map_err(de::Error::custom),
153 }
154 }
155}