Skip to main content

tongbal_api/chat/
types.rs

1use serde::{Deserialize, Serialize};
2
3use crate::types::MessageId;
4
5#[derive(Serialize)]
6pub struct MessageBody<'a> {
7    pub message: &'a str,
8}
9
10#[derive(Serialize)]
11#[serde(rename_all = "camelCase")]
12pub struct NoticeBody<'a> {
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub message: Option<&'a str>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub message_id: Option<&'a MessageId>,
17}
18
19#[derive(Debug, Deserialize, Serialize)]
20#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
21pub enum ChatCondition {
22    None,
23    RealName,
24}
25
26#[derive(Debug, Deserialize, Serialize)]
27#[serde(rename_all = "UPPERCASE")]
28pub enum ChatGroup {
29    All,
30    Follower,
31    Manager,
32    Subscriber,
33}
34
35#[derive(Debug)]
36pub enum ChatSlowModeSec {
37    Off,
38    Three,
39    Five,
40    Ten,
41    Thirty,
42    Sixty,
43    TwoMinutes,
44    FiveMinutes,
45}
46
47impl Serialize for ChatSlowModeSec {
48    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
49    where
50        S: serde::Serializer,
51    {
52        let value = match self {
53            Self::Off => 0,
54            Self::Three => 3,
55            Self::Five => 5,
56            Self::Ten => 10,
57            Self::Thirty => 30,
58            Self::Sixty => 60,
59            Self::TwoMinutes => 120,
60            Self::FiveMinutes => 300,
61        };
62        serializer.serialize_u64(value)
63    }
64}
65
66impl<'de> Deserialize<'de> for ChatSlowModeSec {
67    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
68    where
69        D: serde::Deserializer<'de>,
70    {
71        use serde::de::{Unexpected, Visitor};
72        struct ChatSlowModeSecVisitor;
73
74        impl<'de> Visitor<'de> for ChatSlowModeSecVisitor {
75            type Value = ChatSlowModeSec;
76
77            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
78                formatter.write_str("0, 3, 5, 10, 30, 60, 120, or 300")
79            }
80
81            fn visit_u64<E>(self, v: u64) -> Result<Self::Value, E>
82            where
83                E: serde::de::Error,
84            {
85                match v {
86                    0 => Ok(ChatSlowModeSec::Off),
87                    3 => Ok(ChatSlowModeSec::Three),
88                    5 => Ok(ChatSlowModeSec::Five),
89                    10 => Ok(ChatSlowModeSec::Ten),
90                    30 => Ok(ChatSlowModeSec::Thirty),
91                    60 => Ok(ChatSlowModeSec::Sixty),
92                    120 => Ok(ChatSlowModeSec::TwoMinutes),
93                    300 => Ok(ChatSlowModeSec::FiveMinutes),
94                    _ => Err(E::invalid_value(Unexpected::Unsigned(v), &self)),
95                }
96            }
97        }
98
99        deserializer.deserialize_u64(ChatSlowModeSecVisitor)
100    }
101}
102
103#[derive(Debug)]
104pub enum MinFollowerMinute {
105    Zero,
106    Five,
107    Ten,
108    Thirty,
109    Sixty,
110    OneDay,
111    OneWeek,
112    ThirtyDays,
113    SixtyDays,
114    NinetyDays,
115    OneTwentyDays,
116    OneFiftyDays,
117    OneEightyDays,
118}
119
120impl Serialize for MinFollowerMinute {
121    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
122    where
123        S: serde::Serializer,
124    {
125        let value = match self {
126            Self::Zero => 0,
127            Self::Five => 5,
128            Self::Ten => 10,
129            Self::Thirty => 30,
130            Self::Sixty => 60,
131            Self::OneDay => 1440,
132            Self::OneWeek => 10080,
133            Self::ThirtyDays => 43200,
134            Self::SixtyDays => 86400,
135            Self::NinetyDays => 129600,
136            Self::OneTwentyDays => 172800,
137            Self::OneFiftyDays => 216000,
138            Self::OneEightyDays => 259200,
139        };
140        serializer.serialize_u64(value)
141    }
142}
143
144impl<'de> Deserialize<'de> for MinFollowerMinute {
145    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
146    where
147        D: serde::Deserializer<'de>,
148    {
149        use serde::de::{Unexpected, Visitor};
150
151        struct MinFollowerMinuteVisitor;
152        impl<'de> Visitor<'de> for MinFollowerMinuteVisitor {
153            type Value = MinFollowerMinute;
154
155            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
156                formatter.write_str("0, 5, 10, 30, 60, 1440, 10080, 43200, 86400, 129600, 172800, 216000, or 259200")
157            }
158
159            fn visit_u64<E>(self, v: u64) -> Result<Self::Value, E>
160            where
161                E: serde::de::Error,
162            {
163                match v {
164                    0 => Ok(MinFollowerMinute::Zero),
165                    5 => Ok(MinFollowerMinute::Five),
166                    10 => Ok(MinFollowerMinute::Ten),
167                    30 => Ok(MinFollowerMinute::Thirty),
168                    60 => Ok(MinFollowerMinute::Sixty),
169                    1440 => Ok(MinFollowerMinute::OneDay),
170                    10080 => Ok(MinFollowerMinute::OneWeek),
171                    43200 => Ok(MinFollowerMinute::ThirtyDays),
172                    86400 => Ok(MinFollowerMinute::SixtyDays),
173                    129600 => Ok(MinFollowerMinute::NinetyDays),
174                    172800 => Ok(MinFollowerMinute::OneTwentyDays),
175                    216000 => Ok(MinFollowerMinute::OneFiftyDays),
176                    259200 => Ok(MinFollowerMinute::OneEightyDays),
177                    _ => Err(E::invalid_value(Unexpected::Unsigned(v), &self)),
178                }
179            }
180        }
181
182        deserializer.deserialize_u64(MinFollowerMinuteVisitor)
183    }
184}