p2p/network/scheduler_effectful/
p2p_network_scheduler_effectful_actions.rs

1use std::net::{IpAddr, SocketAddr};
2
3use openmina_core::ActionEvent;
4use serde::{Deserialize, Serialize};
5
6use crate::{ConnectionAddr, P2pNetworkConnectionCloseReason, P2pState};
7
8#[derive(Serialize, Deserialize, Debug, Clone, ActionEvent)]
9#[action_event(fields(display(ip), display(listener), display(addr), debug(result), select_kind = debug(kind), display(error)))]
10pub enum P2pNetworkSchedulerEffectfulAction {
11    InterfaceDetected {
12        ip: IpAddr,
13        port: u16,
14    },
15    IncomingConnectionIsReady {
16        listener: SocketAddr,
17        should_accept: bool,
18    },
19    #[action_event(fields(debug(addr), debug(result)))]
20    IncomingDidAccept {
21        addr: ConnectionAddr,
22        result: Result<(), String>,
23    },
24    /// Initialize outgoing connection.
25    OutgoingConnect {
26        addr: SocketAddr,
27    },
28    /// Outgoing TCP stream is established.
29    OutgoingDidConnect {
30        addr: ConnectionAddr,
31    },
32    IncomingDataIsReady {
33        addr: ConnectionAddr,
34        limit: usize,
35    },
36    NoiseSelectDone {
37        addr: ConnectionAddr,
38        incoming: bool,
39    },
40    /// Action that initiate the specified peer disconnection.
41    Disconnect {
42        /// Connection address.
43        addr: ConnectionAddr,
44        /// Reason why disconnection is triggered.
45        reason: P2pNetworkConnectionCloseReason,
46    },
47}
48
49impl From<P2pNetworkSchedulerEffectfulAction> for crate::P2pEffectfulAction {
50    fn from(value: P2pNetworkSchedulerEffectfulAction) -> crate::P2pEffectfulAction {
51        crate::P2pEffectfulAction::Network(crate::P2pNetworkEffectfulAction::Scheduler(value))
52    }
53}
54
55impl redux::EnablingCondition<P2pState> for P2pNetworkSchedulerEffectfulAction {
56    fn is_enabled(&self, _state: &P2pState, _time: redux::Timestamp) -> bool {
57        true
58    }
59}