p2p/channels/signaling/
p2p_channels_signaling_state.rs1use serde::{Deserialize, Serialize};
2
3use crate::PeerId;
4
5use super::{
6 discovery::{P2pChannelsSignalingDiscoveryState, SignalingDiscoveryState},
7 exchange::{P2pChannelsSignalingExchangeState, SignalingExchangeState},
8};
9
10#[derive(Serialize, Deserialize, Debug, Clone)]
11pub struct P2pChannelsSignalingState {
12 pub discovery: P2pChannelsSignalingDiscoveryState,
13 pub exchange: P2pChannelsSignalingExchangeState,
14}
15
16impl P2pChannelsSignalingState {
17 pub fn am_looking_for_peer(&self) -> bool {
18 match &self.discovery {
19 P2pChannelsSignalingDiscoveryState::Ready { remote, .. } => {
20 matches!(remote, SignalingDiscoveryState::DiscoveryRequested { .. })
21 }
22 _ => false,
23 }
24 }
25
26 pub fn received_discovered_peer_id(&self) -> Option<PeerId> {
27 match &self.discovery {
28 P2pChannelsSignalingDiscoveryState::Ready {
29 remote:
30 SignalingDiscoveryState::Discovered {
31 target_public_key, ..
32 }
33 | SignalingDiscoveryState::DiscoveredAccepted {
34 target_public_key, ..
35 },
36 ..
37 } => Some(target_public_key.peer_id()),
38 _ => None,
39 }
40 }
41
42 pub fn is_looking_for_peer(&self) -> bool {
43 match &self.discovery {
44 P2pChannelsSignalingDiscoveryState::Ready { local, .. } => {
45 matches!(local, SignalingDiscoveryState::DiscoveryRequested { .. })
46 }
47 _ => false,
48 }
49 }
50
51 pub fn sent_discovered_peer_id(&self) -> Option<PeerId> {
52 match &self.discovery {
53 P2pChannelsSignalingDiscoveryState::Ready {
54 local:
55 SignalingDiscoveryState::Discovered {
56 target_public_key, ..
57 }
58 | SignalingDiscoveryState::DiscoveredAccepted {
59 target_public_key, ..
60 },
61 ..
62 } => Some(target_public_key.peer_id()),
63 _ => None,
64 }
65 }
66
67 pub fn is_looking_for_incoming_peer(&self) -> bool {
68 matches!(
69 self.exchange,
70 P2pChannelsSignalingExchangeState::Ready {
71 remote: SignalingExchangeState::Requested { .. },
72 ..
73 }
74 )
75 }
76}