From 1f67eff723207c37ed987f7ade9e4880b2609db5 Mon Sep 17 00:00:00 2001 From: NicolasCantu Date: Wed, 12 Mar 2025 10:19:55 +0100 Subject: [PATCH] Add serialization {de}serialize_hex --- src/serialization.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/serialization.rs b/src/serialization.rs index 268be56..375b6db 100644 --- a/src/serialization.rs +++ b/src/serialization.rs @@ -11,6 +11,29 @@ pub struct OutPointMemberMap(#[serde(with = "members_map")] pub HashMap); +// These helper functions convert a [u8; 32] to/from a hex string. +pub(crate) fn serialize_hex(bytes: &[u8; 32], serializer: S) -> Result +where + S: Serializer, +{ + let hex_str = bytes.to_lower_hex_string(); + serializer.serialize_str(&hex_str) +} + +pub(crate) fn deserialize_hex<'de, D>(deserializer: D) -> Result<[u8; 32], D::Error> +where + D: Deserializer<'de>, +{ + let s = String::deserialize(deserializer)?; + let bytes = Vec::from_hex(&s).map_err(D::Error::custom)?; + if bytes.len() != 32 { + return Err(D::Error::custom("Invalid length for [u8;32]")); + } + let mut arr = [0u8; 32]; + arr.copy_from_slice(&bytes); + Ok(arr) +} + pub mod members_map { use super::*; use crate::pcd::Member;