1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
use crate::WebRtcError;

use uuid::Uuid;

pub type DataChannelId = usize;

#[derive(Debug)]
pub enum DataChannelMessage {
    Text(String),
    Binary(Vec<u8>),
}

#[derive(Debug)]
pub enum DataChannelState {
    Connecting,
    Open,
    Closing,
    Closed,
    __Unknown(i32),
}

pub enum DataChannelEvent {
    NewChannel,
    Open,
    Close,
    Error(WebRtcError),
    OnMessage(DataChannelMessage),
    StateChange(DataChannelState),
}

// https://www.w3.org/TR/webrtc/#dom-rtcdatachannelinit
// plus `label`
pub struct DataChannelInit {
    pub label: String,
    pub ordered: bool,
    pub max_packet_life_time: Option<u16>,
    pub max_retransmits: Option<u16>,
    pub protocol: String,
    pub negotiated: bool,
    pub id: Option<u16>,
}

impl Default for DataChannelInit {
    fn default() -> DataChannelInit {
        DataChannelInit {
            label: Uuid::new_v4().to_string(),
            ordered: true,
            max_packet_life_time: None,
            max_retransmits: None,
            protocol: String::new(),
            negotiated: false,
            id: None,
        }
    }
}