node/p2p/
mod.rs

1pub use ::p2p::*;
2use p2p::{
3    channels::P2pChannelsEffectfulAction,
4    network::identify::stream_effectful::P2pNetworkIdentifyStreamEffectfulAction,
5};
6
7pub mod channels;
8pub mod connection;
9pub mod disconnection;
10pub mod network;
11pub mod peer;
12
13pub mod callbacks;
14
15mod p2p_effects;
16pub use p2p_effects::*;
17use redux::EnablingCondition;
18
19use crate::State;
20
21impl<S> redux::SubStore<crate::State, P2pState> for crate::Store<S>
22where
23    S: redux::Service,
24{
25    type SubAction = P2pAction;
26    type Service = S;
27
28    fn state(&self) -> &P2pState {
29        self.state
30            .get()
31            .p2p
32            .ready()
33            .expect("p2p should be initialized")
34    }
35
36    fn service(&mut self) -> &mut Self::Service {
37        &mut self.service
38    }
39
40    fn state_and_service(&mut self) -> (&P2pState, &mut Self::Service) {
41        (
42            self.state
43                .get()
44                .p2p
45                .ready()
46                .expect("p2p should be initialized"),
47            &mut self.service,
48        )
49    }
50
51    fn dispatch<A>(&mut self, action: A) -> bool
52    where
53        A: Into<P2pAction> + redux::EnablingCondition<P2pState>,
54    {
55        crate::Store::sub_dispatch(self, action)
56    }
57
58    fn dispatch_callback<T>(&mut self, callback: redux::Callback<T>, args: T) -> bool
59    where
60        T: 'static,
61        P2pAction: From<redux::AnyAction> + redux::EnablingCondition<P2pState>,
62    {
63        crate::Store::dispatch_callback(self, callback, args)
64    }
65}
66
67impl EnablingCondition<State> for P2pInitializeAction {
68    fn is_enabled(&self, state: &State, _time: redux::Timestamp) -> bool {
69        state.p2p.ready().is_none()
70    }
71}
72
73macro_rules! impl_into_global_action {
74    ($a:ty) => {
75        impl From<$a> for crate::Action {
76            fn from(value: $a) -> Self {
77                Self::P2p(value.into())
78            }
79        }
80    };
81    (effectful $a:ty) => {
82        impl From<$a> for crate::Action {
83            fn from(value: $a) -> Self {
84                Self::P2pEffectful(value.into())
85            }
86        }
87    };
88}
89
90impl_into_global_action!(P2pInitializeAction);
91
92impl_into_global_action!(connection::outgoing::P2pConnectionOutgoingAction);
93
94impl_into_global_action!(connection::incoming::P2pConnectionIncomingAction);
95
96impl_into_global_action!(disconnection::P2pDisconnectionAction);
97
98impl_into_global_action!(network::P2pNetworkSchedulerAction);
99impl_into_global_action!(network::kad::P2pNetworkKademliaAction);
100impl_into_global_action!(network::pubsub::P2pNetworkPubsubAction);
101
102impl_into_global_action!(channels::P2pChannelsMessageReceivedAction);
103impl_into_global_action!(channels::signaling::discovery::P2pChannelsSignalingDiscoveryAction);
104impl_into_global_action!(channels::signaling::exchange::P2pChannelsSignalingExchangeAction);
105impl_into_global_action!(channels::best_tip::P2pChannelsBestTipAction);
106impl_into_global_action!(channels::transaction::P2pChannelsTransactionAction);
107impl_into_global_action!(channels::snark::P2pChannelsSnarkAction);
108impl_into_global_action!(channels::snark_job_commitment::P2pChannelsSnarkJobCommitmentAction);
109impl_into_global_action!(channels::rpc::P2pChannelsRpcAction);
110impl_into_global_action!(channels::streaming_rpc::P2pChannelsStreamingRpcAction);
111
112impl_into_global_action!(p2p::P2pNetworkKademliaStreamAction);
113impl_into_global_action!(p2p::P2pNetworkKadRequestAction);
114impl_into_global_action!(p2p::P2pNetworkKadBootstrapAction);
115impl_into_global_action!(p2p::P2pNetworkYamuxAction);
116impl_into_global_action!(p2p::peer::P2pPeerAction);
117impl_into_global_action!(p2p::network::identify::stream::P2pNetworkIdentifyStreamAction);
118impl_into_global_action!(p2p::identify::P2pIdentifyAction);
119impl_into_global_action!(p2p::P2pNetworkSelectAction);
120impl_into_global_action!(p2p::P2pNetworkPnetAction);
121impl_into_global_action!(p2p::P2pNetworkNoiseAction);
122impl_into_global_action!(p2p::P2pNetworkRpcAction);
123
124impl_into_global_action!(effectful network::kad_effectful::P2pNetworkKadEffectfulAction);
125impl_into_global_action!(effectful p2p::P2pNetworkSchedulerEffectfulAction);
126impl_into_global_action!(effectful p2p::P2pNetworkPnetEffectfulAction);
127impl_into_global_action!(effectful connection::incoming_effectful::P2pConnectionIncomingEffectfulAction);
128impl_into_global_action!(effectful connection::outgoing_effectful::P2pConnectionOutgoingEffectfulAction);
129impl_into_global_action!(effectful p2p::disconnection_effectful::P2pDisconnectionEffectfulAction);
130impl_into_global_action!(effectful network::pubsub::P2pNetworkPubsubEffectfulAction);
131impl_into_global_action!(effectful P2pNetworkIdentifyStreamEffectfulAction);
132impl_into_global_action!(effectful P2pChannelsEffectfulAction);
133
134impl p2p::P2pActionTrait<crate::State> for crate::Action {}