p2p/network/
p2p_network_actions.rs

1use openmina_core::ActionEvent;
2use serde::{Deserialize, Serialize};
3
4use super::{
5    identify::*, kad::*, noise::*, pnet::*, pnet_effectful::*, pubsub::*, rpc::*, scheduler::*,
6    select::*, yamux::*, P2pNetworkSchedulerEffectfulAction,
7};
8
9use crate::P2pState;
10
11#[derive(derive_more::From, Serialize, Deserialize, Debug, Clone, ActionEvent)]
12pub enum P2pNetworkAction {
13    Scheduler(P2pNetworkSchedulerAction),
14    Pnet(P2pNetworkPnetAction),
15    Select(P2pNetworkSelectAction),
16    Noise(P2pNetworkNoiseAction),
17    Yamux(P2pNetworkYamuxAction),
18    Identify(P2pNetworkIdentifyAction),
19    Kad(P2pNetworkKadAction),
20    Pubsub(P2pNetworkPubsubAction),
21    Rpc(P2pNetworkRpcAction),
22}
23
24impl redux::EnablingCondition<P2pState> for P2pNetworkAction {
25    fn is_enabled(&self, state: &P2pState, time: redux::Timestamp) -> bool {
26        match self {
27            Self::Scheduler(v) => v.is_enabled(state, time),
28            Self::Pnet(v) => v.is_enabled(state, time),
29            Self::Select(v) => v.is_enabled(state, time),
30            Self::Noise(v) => v.is_enabled(state, time),
31            Self::Yamux(v) => v.is_enabled(state, time),
32            Self::Identify(v) => v.is_enabled(state, time),
33            Self::Kad(v) => v.is_enabled(state, time),
34            Self::Pubsub(v) => v.is_enabled(state, time),
35            Self::Rpc(v) => v.is_enabled(state, time),
36        }
37    }
38}
39
40#[derive(derive_more::From, Serialize, Deserialize, Debug, Clone, ActionEvent)]
41pub enum P2pNetworkEffectfulAction {
42    Scheduler(P2pNetworkSchedulerEffectfulAction),
43    Pnet(P2pNetworkPnetEffectfulAction),
44    Pubsub(P2pNetworkPubsubEffectfulAction),
45    Identify(P2pNetworkIdentifyEffectfulAction),
46    Kad(P2pNetworkKadEffectfulAction),
47}
48
49impl redux::EnablingCondition<P2pState> for P2pNetworkEffectfulAction {
50    fn is_enabled(&self, state: &P2pState, time: redux::Timestamp) -> bool {
51        match self {
52            Self::Scheduler(v) => v.is_enabled(state, time),
53            Self::Pnet(v) => v.is_enabled(state, time),
54            Self::Pubsub(v) => v.is_enabled(state, time),
55            Self::Identify(v) => v.is_enabled(state, time),
56            Self::Kad(v) => v.is_enabled(state, time),
57        }
58    }
59}