twilight_model/channel/webhook/
kind.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
4#[serde(from = "u8", into = "u8")]
5#[derive(Default)]
6pub enum WebhookType {
7    #[default]
8    Incoming,
9    ChannelFollower,
10    /// Webhooks used with interactions.
11    Application,
12    /// Variant value is unknown to the library.
13    Unknown(u8),
14}
15
16impl From<u8> for WebhookType {
17    fn from(value: u8) -> Self {
18        match value {
19            1 => WebhookType::Incoming,
20            2 => WebhookType::ChannelFollower,
21            3 => WebhookType::Application,
22            unknown => WebhookType::Unknown(unknown),
23        }
24    }
25}
26
27impl From<WebhookType> for u8 {
28    fn from(value: WebhookType) -> Self {
29        match value {
30            WebhookType::Incoming => 1,
31            WebhookType::ChannelFollower => 2,
32            WebhookType::Application => 3,
33            WebhookType::Unknown(unknown) => unknown,
34        }
35    }
36}
37
38#[cfg(test)]
39mod tests {
40    use super::WebhookType;
41    use serde_test::Token;
42
43    #[test]
44    fn default() {
45        assert_eq!(WebhookType::Incoming, WebhookType::default());
46    }
47
48    #[test]
49    fn variants() {
50        serde_test::assert_tokens(&WebhookType::Incoming, &[Token::U8(1)]);
51        serde_test::assert_tokens(&WebhookType::ChannelFollower, &[Token::U8(2)]);
52        serde_test::assert_tokens(&WebhookType::Application, &[Token::U8(3)]);
53        serde_test::assert_tokens(&WebhookType::Unknown(99), &[Token::U8(99)]);
54    }
55}