p2p/network/kad/stream/
mod.rs

1mod p2p_network_kad_stream_state;
2use redux::Callback;
3use serde::{Deserialize, Serialize};
4
5use crate::{ConnectionAddr, P2pNetworkKademliaAction, PeerId, StreamId};
6
7pub use self::p2p_network_kad_stream_state::*;
8
9mod p2p_network_kad_stream_actions;
10pub use self::p2p_network_kad_stream_actions::*;
11
12use super::{P2pNetworkKadEntry, CID};
13
14#[cfg(feature = "p2p-libp2p")]
15mod p2p_network_kad_stream_reducer;
16
17#[derive(Deserialize, Serialize, Debug, Clone)]
18pub enum P2pNetworkKademliaStreamWaitOutgoingCallback {
19    AnswerFindNodeRequest {
20        callback: Callback<(ConnectionAddr, PeerId, StreamId, CID)>,
21        args: CID,
22    },
23    UpdateFindNodeRequest {
24        callback: Callback<(ConnectionAddr, PeerId, StreamId, Vec<P2pNetworkKadEntry>)>,
25        args: Vec<P2pNetworkKadEntry>,
26    },
27}
28
29impl P2pNetworkKademliaStreamWaitOutgoingCallback {
30    pub fn answer_find_node_request(cid: CID) -> Self {
31        Self::AnswerFindNodeRequest {
32            callback: redux::callback!(
33                on_p2p_network_stream_wait_outgoing_answer_find_node_request((
34                    addr: ConnectionAddr,
35                    peer_id: PeerId,
36                    stream_id: StreamId,
37                    cid: CID
38                )) -> crate::P2pAction{
39                    P2pNetworkKademliaAction::AnswerFindNodeRequest { addr, peer_id, stream_id, key: cid }
40                }
41            ),
42            args: cid,
43        }
44    }
45    pub fn update_find_node_request(peers: Vec<P2pNetworkKadEntry>) -> Self {
46        Self::UpdateFindNodeRequest {
47            callback: redux::callback!(
48                on_p2p_network_stream_wait_outgoing_answer_find_node_request((
49                    addr: ConnectionAddr,
50                    peer_id: PeerId,
51                    stream_id: StreamId,
52                    closest_peers: Vec<P2pNetworkKadEntry>
53                )) -> crate::P2pAction{
54                    P2pNetworkKademliaAction::UpdateFindNodeRequest { addr, peer_id, stream_id, closest_peers }
55                }
56            ),
57            args: peers,
58        }
59    }
60}