twilight_model/voice/
opcode.rs

1use serde_repr::{Deserialize_repr, Serialize_repr};
2
3/// Voice gateway opcodes.
4#[derive(Clone, Copy, Debug, Deserialize_repr, Eq, Hash, PartialEq, Serialize_repr)]
5#[non_exhaustive]
6#[repr(u8)]
7pub enum OpCode {
8    /// Start a voice websocket connection.
9    Identify = 0,
10    /// Select the protocol to use.
11    SelectProtocol = 1,
12    /// Received to indicate completion of handshake.
13    Ready = 2,
14    /// Fired periodically to keep connection alive.
15    Heartbeat = 3,
16    /// Received to indicate session description.
17    SessionDescription = 4,
18    /// Sent and received to indicate speaking status.
19    Speaking = 5,
20    /// Received in response to a heartbeat.
21    HeartbeatAck = 6,
22    /// Resume a previously disconnected session.
23    Resume = 7,
24    /// Received after connecting, contains heartbeat interval.
25    Hello = 8,
26    /// Received to indicate a successful resume.
27    Resumed = 9,
28    /// Received to indicate someone was disconnected.
29    ClientDisconnect = 13,
30}
31
32#[cfg(test)]
33mod tests {
34    use super::OpCode;
35    use serde_test::Token;
36
37    #[test]
38    fn variants() {
39        serde_test::assert_tokens(&OpCode::Identify, &[Token::U8(0)]);
40        serde_test::assert_tokens(&OpCode::SelectProtocol, &[Token::U8(1)]);
41        serde_test::assert_tokens(&OpCode::Ready, &[Token::U8(2)]);
42        serde_test::assert_tokens(&OpCode::Heartbeat, &[Token::U8(3)]);
43        serde_test::assert_tokens(&OpCode::SessionDescription, &[Token::U8(4)]);
44        serde_test::assert_tokens(&OpCode::Speaking, &[Token::U8(5)]);
45        serde_test::assert_tokens(&OpCode::HeartbeatAck, &[Token::U8(6)]);
46        serde_test::assert_tokens(&OpCode::Resume, &[Token::U8(7)]);
47        serde_test::assert_tokens(&OpCode::Hello, &[Token::U8(8)]);
48        serde_test::assert_tokens(&OpCode::Resumed, &[Token::U8(9)]);
49        serde_test::assert_tokens(&OpCode::ClientDisconnect, &[Token::U8(13)]);
50    }
51}