p2p/network/pnet/
p2p_network_pnet_actions.rs1use crate::{ConnectionAddr, Data, P2pState};
2use openmina_core::ActionEvent;
3use serde::{Deserialize, Serialize};
4
5#[derive(Serialize, Deserialize, Debug, Clone, ActionEvent)]
6#[action_event(fields(display(addr), debug(data), incoming), level = trace)]
7pub enum P2pNetworkPnetAction {
8 IncomingData {
9 addr: ConnectionAddr,
10 data: Data,
11 },
12 OutgoingData {
13 addr: ConnectionAddr,
14 data: Data,
15 },
16 #[action_event(level = debug)]
17 SetupNonce {
18 addr: ConnectionAddr,
19 nonce: Data,
20 incoming: bool,
21 },
22 Timeout {
23 addr: ConnectionAddr,
24 },
25}
26
27impl P2pNetworkPnetAction {
28 pub fn addr(&self) -> &ConnectionAddr {
29 match self {
30 Self::IncomingData { addr, .. } => addr,
31 Self::OutgoingData { addr, .. } => addr,
32 Self::SetupNonce { addr, .. } => addr,
33 Self::Timeout { addr } => addr,
34 }
35 }
36}
37
38impl From<P2pNetworkPnetAction> for crate::P2pAction {
39 fn from(a: P2pNetworkPnetAction) -> Self {
40 Self::Network(a.into())
41 }
42}
43
44impl redux::EnablingCondition<P2pState> for P2pNetworkPnetAction {
45 fn is_enabled(&self, state: &P2pState, _time: redux::Timestamp) -> bool {
46 state
47 .network
48 .scheduler
49 .connection_state(self.addr())
50 .is_some()
51 }
52}