Custom implement of Serialize for HandshakeMessage

This commit is contained in:
NicolasCantu 2025-01-09 17:54:28 +01:00
parent 0a6bc4e970
commit 35a046f7e8

View File

@ -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<OutPoint, Process>,
}
impl Serialize for HandshakeMessage {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let mut state = serializer.serialize_struct("HandshakeMessage", 3)?;
state.serialize_field("sp_address", &self.sp_address)?;
let peers_list: HashMap<String, &OutPoint> = 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<Member, OutPoint>, processes_list: HashMap<OutPoint, Process>) -> Self {
Self {