push_messaging/fcm/
message.rs1use std::{error::Error, fmt, rc::Rc, str::FromStr};
2
3use builder_pattern::Builder;
4use chrono::{DateTime, Duration, FixedOffset};
5use serde::{Deserialize, Deserializer, Serialize, Serializer};
6use serde_json::Value;
7use serde_with::skip_serializing_none;
8
9use super::notification::Notification;
10
11
12#[skip_serializing_none]
13#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Builder)]
14pub struct Message {
15 #[into]
16 #[default(None)]
17 pub data: Option<Value>,
18 #[into]
19 #[default(None)]
20 pub notification: Option<Notification>,
21 #[into]
22 #[default(None)]
23 pub collapser_key: Option<String>,
24
25 #[into]
26 #[default(None)]
27 pub content_available: Option<bool>,
28
29 #[into]
30 #[default(None)]
31 pub delay_while_idle: Option<bool>,
32 #[into]
33 #[default(None)]
34 pub dry_run: Option<bool>,
35
36 #[into]
37 #[default(None)]
38 pub priority: Option<Priority>,
39 #[into]
40 #[default(None)]
41 pub restricted_package_name: Option<String>,
42 #[into]
43 #[default(None)]
44 pub time_to_live: Option<u32>,
45 #[into]
46 #[default(None)]
47 pub to: Option<String>,
48 #[into]
49 #[default(None)]
50 pub mutable_content: Option<bool>,
51}
52
53
54#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
55pub enum Priority {
56 High,
57 Normal,
58}
59
60impl From<crate::client::message::Priority> for Priority{
61 fn from(prioroty:crate::client::message::Priority ) -> Self {
62 match prioroty {
63 crate::client::message::Priority::High => Self::High,
64 crate::client::message::Priority::Normal => Self::Normal,
65 }
66 }
67}
68
69
70impl From<crate::client::message::Message> for Message{
71 fn from(message: crate::client::message::Message) -> Self {
72 if let Some(meta) = message.meta{
73 return Self{
74 data: message.data,
75 notification: message.notification.map(|notification| notification.into()),
76 collapser_key: meta.collapser_key,
77 content_available: meta.content_available,
78 delay_while_idle: meta.delay_while_idle,
79 dry_run: meta.dry_run,
80 priority: meta.priority.map(|priority| priority.into()),
81 restricted_package_name: meta.restricted_package_name,
82 time_to_live: meta.time_to_live,
83 to: None,
84 mutable_content: meta.mutable_content,
85 };
86 }
87 Self{
88 data: message.data,
89 notification: message.notification.map(|notification| notification.into()),
90 to: None,
91 collapser_key: None,
92 content_available: None,
93 delay_while_idle: None,
94 dry_run: None,
95 priority: None,
96 restricted_package_name: None,
97 time_to_live: None,
98 mutable_content: None,
99
100 }
101 }
102}