p2p/channels/signaling/exchange/
p2p_channels_signaling_exchange_state.rs

1use serde::{Deserialize, Serialize};
2
3use crate::identity::PublicKey;
4
5#[allow(clippy::large_enum_variant)]
6#[derive(Serialize, Deserialize, Debug, Clone)]
7pub enum P2pChannelsSignalingExchangeState {
8    Disabled,
9    Enabled,
10    Init {
11        time: redux::Timestamp,
12    },
13    Pending {
14        time: redux::Timestamp,
15    },
16    Ready {
17        time: redux::Timestamp,
18        /// We are the requestors here.
19        local: SignalingExchangeState,
20        /// We are the responders here.
21        remote: SignalingExchangeState,
22    },
23}
24
25#[derive(Serialize, Deserialize, Debug, Clone)]
26pub enum SignalingExchangeState {
27    /// Next offer wasn't requested, so we shouldn't receive/send any offers.
28    WaitingForRequest {
29        time: redux::Timestamp,
30    },
31    /// Next offer/incoming connection was requested. Offer will be received
32    /// once/if peer wants to connect.
33    Requested {
34        time: redux::Timestamp,
35    },
36    Offered {
37        time: redux::Timestamp,
38        offerer_pub_key: PublicKey,
39    },
40    Answered {
41        time: redux::Timestamp,
42    },
43}
44
45impl P2pChannelsSignalingExchangeState {
46    pub fn is_ready(&self) -> bool {
47        matches!(self, Self::Ready { .. })
48    }
49}