mina_p2p_messages/
gossip.rs1use std::sync::Arc;
2
3use binprot_derive::{BinProtRead, BinProtWrite};
4use derive_more::{From, TryInto};
5use serde::{Deserialize, Serialize};
6
7use crate::{number::Int32, v2};
8
9#[derive(
10 Clone, Debug, Serialize, Deserialize, BinProtRead, BinProtWrite, PartialEq, From, TryInto,
11)]
12#[serde(tag = "type", content = "message", rename_all = "snake_case")]
13pub enum GossipNetMessageV2 {
14 NewState(Arc<v2::MinaBlockBlockStableV2>),
15 SnarkPoolDiff {
16 message: v2::NetworkPoolSnarkPoolDiffVersionedStableV2,
17 nonce: Int32,
18 },
19 TransactionPoolDiff {
20 message: v2::NetworkPoolTransactionPoolDiffVersionedStableV2,
21 nonce: Int32,
22 },
23}
24
25impl TryFrom<GossipNetMessageV2> for v2::NetworkPoolSnarkPoolDiffVersionedStableV2 {
26 type Error = ();
27
28 fn try_from(value: GossipNetMessageV2) -> Result<Self, Self::Error> {
29 match value {
30 GossipNetMessageV2::SnarkPoolDiff { message, .. } => Ok(message),
31 _ => Err(()),
32 }
33 }
34}
35
36impl TryFrom<GossipNetMessageV2> for v2::NetworkPoolTransactionPoolDiffVersionedStableV2 {
37 type Error = ();
38
39 fn try_from(value: GossipNetMessageV2) -> Result<Self, Self::Error> {
40 match value {
41 GossipNetMessageV2::TransactionPoolDiff { message, .. } => Ok(message),
42 _ => Err(()),
43 }
44 }
45}