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}