Skip to main content

host_extensions/protocol/
signal.rs

1/// Signal type constants used in the `{ type, data }` envelope.
2pub mod signal_type {
3    pub const OFFER: &str = "offer";
4    pub const ANSWER: &str = "answer";
5    pub const CANDIDATE: &str = "candidate";
6    pub const HANGUP: &str = "hangup";
7    pub const RING: &str = "ring";
8    pub const CONNECTED: &str = "connected";
9    pub const CLOSED: &str = "closed";
10    pub const REMOTE_TRACK: &str = "remoteTrack";
11    pub const RENEGOTIATE_OFFER: &str = "renegotiateOffer";
12    pub const RENEGOTIATE_ANSWER: &str = "renegotiateAnswer";
13}
14
15/// Envelope for media signaling messages (offer, answer, ICE candidate, hangup).
16#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
17pub struct SignalPayload {
18    #[serde(rename = "type")]
19    pub signal_type: String,
20    pub data: String,
21}
22
23/// Payload for ring (incoming call) notifications.
24#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
25pub struct RingPayload {
26    #[serde(rename = "type")]
27    pub ring_type: String,
28    pub from: String,
29}
30
31impl SignalPayload {
32    pub fn new(signal_type: &str, data: impl Into<String>) -> Self {
33        Self {
34            signal_type: signal_type.to_string(),
35            data: data.into(),
36        }
37    }
38}
39
40impl RingPayload {
41    pub fn new(from: impl Into<String>) -> Self {
42        Self {
43            ring_type: signal_type::RING.to_string(),
44            from: from.into(),
45        }
46    }
47}