mina_p2p_messages/
gossip.rs

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