From 35a046f7e89e5bc1c20bf86c2a6c0134a11edbff Mon Sep 17 00:00:00 2001 From: NicolasCantu Date: Thu, 9 Jan 2025 17:54:28 +0100 Subject: [PATCH] Custom implement of Serialize for HandshakeMessage --- src/network.rs | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/network.rs b/src/network.rs index 0e888ce..941e95c 100644 --- a/src/network.rs +++ b/src/network.rs @@ -2,7 +2,8 @@ use std::collections::HashMap; use anyhow::Result; use rand::{thread_rng, RngCore}; -use serde::{Deserialize, Serialize}; +use serde::ser::SerializeStruct; +use serde::{Deserialize, Serialize, Serializer}; use serde_json::Value; use sp_client::bitcoin::consensus::serialize; use sp_client::bitcoin::hex::DisplayHex; @@ -168,7 +169,7 @@ impl NewTxMessage { } } -#[derive(Debug, PartialEq, Serialize, Deserialize, Tsify)] +#[derive(Debug, PartialEq, Deserialize, Tsify)] #[tsify(into_wasm_abi, from_wasm_abi)] pub struct HandshakeMessage { pub sp_address: String, @@ -176,6 +177,32 @@ pub struct HandshakeMessage { pub processes_list: HashMap, } +impl Serialize for HandshakeMessage { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + let mut state = serializer.serialize_struct("HandshakeMessage", 3)?; + + state.serialize_field("sp_address", &self.sp_address)?; + + let peers_list: HashMap = self + .peers_list + .iter() + .map(|(member, outpoint)| { + let member_str = serde_json::to_string(member).unwrap(); + (member_str, outpoint) + }) + .collect(); + state.serialize_field("peers_list", &peers_list)?; + + // Serialize `processes_list` normally + state.serialize_field("processes_list", &self.processes_list)?; + + state.end() + } +} + impl HandshakeMessage { pub fn new(sp_address: String, peers_list: HashMap, processes_list: HashMap) -> Self { Self {