1pub use prpc_serde_bytes::prpc_serde_bytes;
2
3pub mod bytes_as_hex_str {
4 use alloc::string::String;
5 use alloc::vec::Vec;
6 use serde::{Deserialize, Serialize};
7
8 pub fn serialize<S>(bytes: &Vec<u8>, serializer: S) -> Result<S::Ok, S::Error>
9 where
10 S: serde::Serializer,
11 {
12 hex::encode(bytes).serialize(serializer)
13 }
14
15 pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
16 where
17 D: serde::Deserializer<'de>,
18 {
19 let hex_str = String::deserialize(deserializer)?;
20 let hex_str = hex_str.trim_start_matches("0x");
21 hex::decode(hex_str).map_err(serde::de::Error::custom)
22 }
23}
24
25pub mod vec_bytes_as_hex_str {
26 use alloc::string::String;
27 use alloc::vec::Vec;
28 use serde::{Deserialize, Serialize};
29
30 #[allow(clippy::ptr_arg)]
31 pub fn serialize<S>(bytes: &Vec<Vec<u8>>, serializer: S) -> Result<S::Ok, S::Error>
32 where
33 S: serde::Serializer,
34 {
35 let hex_strs: Vec<String> = bytes.iter().map(|bytes| hex::encode(bytes)).collect();
36 hex_strs.serialize(serializer)
37 }
38
39 pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<Vec<u8>>, D::Error>
40 where
41 D: serde::Deserializer<'de>,
42 {
43 let hex_strs: Vec<String> = Vec::deserialize(deserializer)?;
44 hex_strs
45 .into_iter()
46 .map(|hex_str| {
47 let hex_str = hex_str.trim_start_matches("0x");
48 hex::decode(hex_str).map_err(serde::de::Error::custom)
49 })
50 .collect()
51 }
52}
53
54pub mod option_bytes_as_hex_str {
55 use alloc::string::String;
56 use alloc::vec::Vec;
57 use serde::{Deserialize, Serialize};
58
59 pub fn serialize<S>(bytes: &Option<Vec<u8>>, serializer: S) -> Result<S::Ok, S::Error>
60 where
61 S: serde::Serializer,
62 {
63 match bytes {
64 Some(bytes) => hex::encode(bytes).serialize(serializer),
65 None => serializer.serialize_none(),
66 }
67 }
68
69 pub fn deserialize<'de, D>(deserializer: D) -> Result<Option<Vec<u8>>, D::Error>
70 where
71 D: serde::Deserializer<'de>,
72 {
73 let hex_str: Option<String> = Option::deserialize(deserializer)?;
74 match hex_str {
75 Some(hex_str) => {
76 let hex_str = hex_str.trim_start_matches("0x");
77 hex::decode(hex_str)
78 .map(Some)
79 .map_err(serde::de::Error::custom)
80 }
81 None => Ok(None),
82 }
83 }
84}