Add serialization hex_array_btree
This commit is contained in:
parent
fe6d78fbb6
commit
506d62d1d3
@ -109,3 +109,48 @@ pub mod outpoint_map {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Custom module for converting a BTreeMap<String, [u8;32]> using hex conversion.
|
||||||
|
pub mod hex_array_btree {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
// Serializes a BTreeMap<String, [u8; 32]> as a BTreeMap<String, String>
|
||||||
|
// where the value is a hex-encoded string.
|
||||||
|
pub fn serialize<S>(
|
||||||
|
map: &BTreeMap<String, [u8; 32]>,
|
||||||
|
serializer: S,
|
||||||
|
) -> Result<S::Ok, S::Error>
|
||||||
|
where
|
||||||
|
S: Serializer,
|
||||||
|
{
|
||||||
|
// Convert each [u8; 32] to a hex string.
|
||||||
|
let hex_map: BTreeMap<String, String> = map
|
||||||
|
.iter()
|
||||||
|
.map(|(k, v)| (k.clone(), v.to_lower_hex_string()))
|
||||||
|
.collect();
|
||||||
|
hex_map.serialize(serializer)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deserializes a BTreeMap<String, [u8; 32]> from a BTreeMap<String, String>
|
||||||
|
// where the value is expected to be a hex-encoded string.
|
||||||
|
pub fn deserialize<'de, D>(
|
||||||
|
deserializer: D,
|
||||||
|
) -> Result<BTreeMap<String, [u8; 32]>, D::Error>
|
||||||
|
where
|
||||||
|
D: Deserializer<'de>,
|
||||||
|
{
|
||||||
|
// Deserialize into a temporary map with hex string values.
|
||||||
|
let hex_map: BTreeMap<String, String> = BTreeMap::deserialize(deserializer)?;
|
||||||
|
let mut map = BTreeMap::new();
|
||||||
|
// Convert each hex string back into a [u8; 32].
|
||||||
|
for (key, hex_str) in hex_map {
|
||||||
|
let bytes = Vec::from_hex(&hex_str).map_err(D::Error::custom)?;
|
||||||
|
if bytes.len() != 32 {
|
||||||
|
return Err(D::Error::custom("Invalid length for [u8;32]"));
|
||||||
|
}
|
||||||
|
let mut array = [0u8; 32];
|
||||||
|
array.copy_from_slice(&bytes);
|
||||||
|
map.insert(key, array);
|
||||||
|
}
|
||||||
|
Ok(map)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user