twilight_model/channel/
video_quality_mode.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
4#[non_exhaustive]
5#[serde(from = "u8", into = "u8")]
6pub enum VideoQualityMode {
7    /// Discord chooses the quality for optimal performance.
8    Auto,
9    /// 720p.
10    Full,
11    /// Variant value is unknown to the library.
12    Unknown(u8),
13}
14
15impl From<u8> for VideoQualityMode {
16    fn from(value: u8) -> Self {
17        match value {
18            1 => VideoQualityMode::Auto,
19            2 => VideoQualityMode::Full,
20            unknown => VideoQualityMode::Unknown(unknown),
21        }
22    }
23}
24
25impl From<VideoQualityMode> for u8 {
26    fn from(value: VideoQualityMode) -> Self {
27        match value {
28            VideoQualityMode::Auto => 1,
29            VideoQualityMode::Full => 2,
30            VideoQualityMode::Unknown(unknown) => unknown,
31        }
32    }
33}
34
35impl VideoQualityMode {
36    pub const fn name(self) -> &'static str {
37        match self {
38            Self::Auto => "Auto",
39            Self::Full => "Full",
40            Self::Unknown(_) => "Unknown",
41        }
42    }
43}
44
45#[cfg(test)]
46mod tests {
47    use super::VideoQualityMode;
48    use serde_test::Token;
49
50    #[test]
51    fn variants() {
52        serde_test::assert_tokens(&VideoQualityMode::Auto, &[Token::U8(1)]);
53        serde_test::assert_tokens(&VideoQualityMode::Full, &[Token::U8(2)]);
54        serde_test::assert_tokens(&VideoQualityMode::Unknown(99), &[Token::U8(99)]);
55    }
56
57    #[test]
58    fn names() {
59        assert_eq!("Auto", VideoQualityMode::Auto.name());
60        assert_eq!("Full", VideoQualityMode::Full.name());
61        assert_eq!("Unknown", VideoQualityMode::Unknown(99).name());
62    }
63}