p2p/network/scheduler_effectful/
p2p_network_scheduler_effectful_actions.rs1use 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 OutgoingConnect {
26 addr: SocketAddr,
27 },
28 OutgoingDidConnect {
30 addr: ConnectionAddr,
31 },
32 IncomingDataIsReady {
33 addr: ConnectionAddr,
34 limit: usize,
35 },
36 NoiseSelectDone {
37 addr: ConnectionAddr,
38 incoming: bool,
39 },
40 Disconnect {
42 addr: ConnectionAddr,
44 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}