p2p/channels/signaling/
p2p_channels_signaling_state.rs

1use 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}