use serde::{Deserialize, Serialize};
use crate::wallet::Address;
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct CrossChainMsg {
pub dst_chain: u32,
pub payload: Vec<u8>,
pub nonce: u64,
pub sender: Address,
pub ts_ms: u64,
pub status: String,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn cross_chain_msg_round_trips() {
let m = CrossChainMsg {
dst_chain: 8453,
payload: vec![1, 2, 3],
nonce: 1,
sender: Address::ZERO,
ts_ms: 1_700_000_000_000,
status: "pending".into(),
};
let j = serde_json::to_value(&m).unwrap();
for key in ["dst_chain", "ts_ms"] {
assert!(j.get(key).is_some());
}
for key in ["dstChain", "tsMs"] {
assert!(j.get(key).is_none());
}
let dec: CrossChainMsg = serde_json::from_value(j).unwrap();
assert_eq!(m, dec);
}
}