push_messaging/fcm/
message.rs

1use 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}