mina_p2p_messages/
gossip.rs

1use 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}