1use rusmpp_macros::Rusmpp;
2
3#[derive(Default, Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Rusmpp)]
5#[rusmpp(repr = "u8")]
6#[cfg_attr(feature = "arbitrary", derive(::arbitrary::Arbitrary))]
7#[cfg_attr(feature = "serde", derive(::serde::Serialize))]
8#[cfg_attr(feature = "serde-deserialize-unchecked", derive(::serde::Deserialize))]
9pub struct PriorityFlag {
10 pub value: u8,
11}
12
13impl PriorityFlag {
14 pub fn new(value: u8) -> Self {
15 Self { value }
16 }
17}
18
19impl From<PriorityFlagType> for PriorityFlag {
20 fn from(value: PriorityFlagType) -> Self {
21 Self {
22 value: value.into(),
23 }
24 }
25}
26
27impl From<u8> for PriorityFlag {
28 fn from(value: u8) -> Self {
29 Self { value }
30 }
31}
32
33impl From<PriorityFlag> for u8 {
34 fn from(value: PriorityFlag) -> Self {
35 value.value
36 }
37}
38
39impl From<GsmSms> for PriorityFlag {
40 fn from(value: GsmSms) -> Self {
41 Self {
42 value: value.into(),
43 }
44 }
45}
46
47impl From<GsmCbs> for PriorityFlag {
48 fn from(value: GsmCbs) -> Self {
49 Self {
50 value: value.into(),
51 }
52 }
53}
54
55impl From<Ansi136> for PriorityFlag {
56 fn from(value: Ansi136) -> Self {
57 Self {
58 value: value.into(),
59 }
60 }
61}
62
63impl From<Is95> for PriorityFlag {
64 fn from(value: Is95) -> Self {
65 Self {
66 value: value.into(),
67 }
68 }
69}
70
71impl From<Ansi41Cbs> for PriorityFlag {
72 fn from(value: Ansi41Cbs) -> Self {
73 Self {
74 value: value.into(),
75 }
76 }
77}
78
79#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
102pub enum PriorityFlagType {
103 GsmSms(GsmSms),
104 GsmCbs(GsmCbs),
105 Ansi136(Ansi136),
106 Is95(Is95),
107 Ansi41Cbs(Ansi41Cbs),
108}
109
110impl From<PriorityFlagType> for u8 {
111 fn from(value: PriorityFlagType) -> Self {
112 match value {
113 PriorityFlagType::GsmSms(value) => value.into(),
114 PriorityFlagType::GsmCbs(value) => value.into(),
115 PriorityFlagType::Ansi136(value) => value.into(),
116 PriorityFlagType::Is95(value) => value.into(),
117 PriorityFlagType::Ansi41Cbs(value) => value.into(),
118 }
119 }
120}
121
122#[repr(u8)]
123#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Default)]
124pub enum GsmSms {
125 #[default]
126 None = 0,
127 Priority1 = 1,
128 Priority2 = 2,
129 Priority3 = 3,
130}
131
132impl From<u8> for GsmSms {
133 fn from(value: u8) -> Self {
134 match value {
135 0 => GsmSms::None,
136 1 => GsmSms::Priority1,
137 2 => GsmSms::Priority2,
138 3 => GsmSms::Priority3,
139 _ => GsmSms::None,
140 }
141 }
142}
143
144impl From<GsmSms> for u8 {
145 fn from(value: GsmSms) -> Self {
146 match value {
147 GsmSms::None => 0,
148 GsmSms::Priority1 => 1,
149 GsmSms::Priority2 => 2,
150 GsmSms::Priority3 => 3,
151 }
152 }
153}
154
155impl From<GsmSms> for PriorityFlagType {
156 fn from(value: GsmSms) -> Self {
157 PriorityFlagType::GsmSms(value)
158 }
159}
160
161#[repr(u8)]
162#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Default)]
163pub enum GsmCbs {
164 #[default]
165 Normal = 0,
166 ImmediateBroadcast = 1,
167 HighPriority = 2,
168 Reserved = 3,
169 PriorityBackground = 4,
170}
171
172impl From<u8> for GsmCbs {
173 fn from(value: u8) -> Self {
174 match value {
175 0 => GsmCbs::Normal,
176 1 => GsmCbs::ImmediateBroadcast,
177 2 => GsmCbs::HighPriority,
178 3 => GsmCbs::Reserved,
179 4 => GsmCbs::PriorityBackground,
180 _ => GsmCbs::Normal,
181 }
182 }
183}
184
185impl From<GsmCbs> for u8 {
186 fn from(value: GsmCbs) -> Self {
187 match value {
188 GsmCbs::Normal => 0,
189 GsmCbs::ImmediateBroadcast => 1,
190 GsmCbs::HighPriority => 2,
191 GsmCbs::Reserved => 3,
192 GsmCbs::PriorityBackground => 4,
193 }
194 }
195}
196
197impl From<GsmCbs> for PriorityFlagType {
198 fn from(value: GsmCbs) -> Self {
199 PriorityFlagType::GsmCbs(value)
200 }
201}
202
203#[repr(u8)]
204#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Default)]
205pub enum Ansi136 {
206 #[default]
207 Bulk = 0,
208 Normal = 1,
209 Urgent = 2,
210 VeryUrgent = 3,
211}
212
213impl From<u8> for Ansi136 {
214 fn from(value: u8) -> Self {
215 match value {
216 0 => Ansi136::Bulk,
217 1 => Ansi136::Normal,
218 2 => Ansi136::Urgent,
219 3 => Ansi136::VeryUrgent,
220 _ => Ansi136::Normal,
221 }
222 }
223}
224
225impl From<Ansi136> for u8 {
226 fn from(value: Ansi136) -> Self {
227 match value {
228 Ansi136::Bulk => 0,
229 Ansi136::Normal => 1,
230 Ansi136::Urgent => 2,
231 Ansi136::VeryUrgent => 3,
232 }
233 }
234}
235
236impl From<Ansi136> for PriorityFlagType {
237 fn from(value: Ansi136) -> Self {
238 PriorityFlagType::Ansi136(value)
239 }
240}
241
242#[repr(u8)]
243#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Default)]
244pub enum Is95 {
245 #[default]
246 Normal = 0,
247 Interactive = 1,
248 Urgent = 2,
249 Emergency = 3,
250}
251
252impl From<u8> for Is95 {
253 fn from(value: u8) -> Self {
254 match value {
255 0 => Is95::Normal,
256 1 => Is95::Interactive,
257 2 => Is95::Urgent,
258 3 => Is95::Emergency,
259 _ => Is95::Normal,
260 }
261 }
262}
263
264impl From<Is95> for u8 {
265 fn from(value: Is95) -> Self {
266 match value {
267 Is95::Normal => 0,
268 Is95::Interactive => 1,
269 Is95::Urgent => 2,
270 Is95::Emergency => 3,
271 }
272 }
273}
274
275impl From<Is95> for PriorityFlagType {
276 fn from(value: Is95) -> Self {
277 PriorityFlagType::Is95(value)
278 }
279}
280
281#[repr(u8)]
282#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Default)]
283pub enum Ansi41Cbs {
284 #[default]
285 Normal = 0,
286 Interactive = 1,
287 Urgent = 2,
288 Emergency = 3,
289}
290
291impl From<u8> for Ansi41Cbs {
292 fn from(value: u8) -> Self {
293 match value {
294 0 => Ansi41Cbs::Normal,
295 1 => Ansi41Cbs::Interactive,
296 2 => Ansi41Cbs::Urgent,
297 3 => Ansi41Cbs::Emergency,
298 _ => Ansi41Cbs::Normal,
299 }
300 }
301}
302
303impl From<Ansi41Cbs> for u8 {
304 fn from(value: Ansi41Cbs) -> Self {
305 match value {
306 Ansi41Cbs::Normal => 0,
307 Ansi41Cbs::Interactive => 1,
308 Ansi41Cbs::Urgent => 2,
309 Ansi41Cbs::Emergency => 3,
310 }
311 }
312}
313
314impl From<Ansi41Cbs> for PriorityFlagType {
315 fn from(value: Ansi41Cbs) -> Self {
316 PriorityFlagType::Ansi41Cbs(value)
317 }
318}
319
320#[cfg(test)]
321mod tests {
322 use super::*;
323
324 #[test]
325 fn gsm_sms() {
326 let gsm_sms = GsmSms::from(0);
327 assert_eq!(gsm_sms, GsmSms::None);
328
329 let gsm_sms = GsmSms::from(1);
330 assert_eq!(gsm_sms, GsmSms::Priority1);
331
332 let gsm_sms = GsmSms::from(2);
333 assert_eq!(gsm_sms, GsmSms::Priority2);
334
335 let gsm_sms = GsmSms::from(3);
336 assert_eq!(gsm_sms, GsmSms::Priority3);
337
338 let gsm_sms = GsmSms::from(4);
339 assert_eq!(gsm_sms, GsmSms::None);
340 }
341
342 #[test]
343 fn encode_decode() {
344 #[cfg(feature = "alloc")]
345 crate::tests::owned::encode_decode_test_instances::<PriorityFlag>();
346 crate::tests::borrowed::encode_decode_test_instances::<PriorityFlag>();
347 }
348}