p2p/network/identify/
p2p_network_identify_actions.rs

1use crate::{
2    network::identify::{
3        stream::P2pNetworkIdentifyStreamAction,
4        stream_effectful::P2pNetworkIdentifyStreamEffectfulAction,
5    },
6    P2pAction, P2pEffectfulAction, P2pNetworkAction, P2pNetworkEffectfulAction, P2pState,
7};
8use openmina_core::ActionEvent;
9use redux::EnablingCondition;
10use serde::{Deserialize, Serialize};
11
12/// Identify actions.
13#[derive(Debug, Clone, Serialize, Deserialize, derive_more::From, ActionEvent)]
14pub enum P2pNetworkIdentifyAction {
15    Stream(P2pNetworkIdentifyStreamAction),
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize, derive_more::From, ActionEvent)]
19pub enum P2pNetworkIdentifyEffectfulAction {
20    Stream(P2pNetworkIdentifyStreamEffectfulAction),
21}
22
23impl EnablingCondition<P2pState> for P2pNetworkIdentifyAction {
24    fn is_enabled(&self, state: &P2pState, time: redux::Timestamp) -> bool {
25        match self {
26            P2pNetworkIdentifyAction::Stream(action) => action.is_enabled(state, time),
27        }
28    }
29}
30
31impl EnablingCondition<P2pState> for P2pNetworkIdentifyEffectfulAction {
32    fn is_enabled(&self, state: &P2pState, time: redux::Timestamp) -> bool {
33        match self {
34            P2pNetworkIdentifyEffectfulAction::Stream(action) => action.is_enabled(state, time),
35        }
36    }
37}
38
39impl From<P2pNetworkIdentifyAction> for P2pAction {
40    fn from(value: P2pNetworkIdentifyAction) -> Self {
41        P2pNetworkAction::Identify(value).into()
42    }
43}
44
45impl From<P2pNetworkIdentifyEffectfulAction> for P2pEffectfulAction {
46    fn from(value: P2pNetworkIdentifyEffectfulAction) -> P2pEffectfulAction {
47        P2pEffectfulAction::Network(P2pNetworkEffectfulAction::Identify(value))
48    }
49}