use std::{error::Error, fmt, rc::Rc, str::FromStr};
use builder_pattern::Builder;
use chrono::{DateTime, Duration, FixedOffset};
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use serde_json::Value;
use serde_with::skip_serializing_none;
use super::notification::Notification;
#[skip_serializing_none]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Builder)]
pub struct Message {
#[into]
#[default(None)]
pub data: Option<Value>,
#[into]
#[default(None)]
pub notification: Option<Notification>,
#[into]
#[default(None)]
pub collapser_key: Option<String>,
#[into]
#[default(None)]
pub content_available: Option<bool>,
#[into]
#[default(None)]
pub delay_while_idle: Option<bool>,
#[into]
#[default(None)]
pub dry_run: Option<bool>,
#[into]
#[default(None)]
pub priority: Option<Priority>,
#[into]
#[default(None)]
pub restricted_package_name: Option<String>,
#[into]
#[default(None)]
pub time_to_live: Option<u32>,
#[into]
#[default(None)]
pub to: Option<String>,
#[into]
#[default(None)]
pub mutable_content: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum Priority {
High,
Normal,
}
impl From<crate::client::message::Priority> for Priority{
fn from(prioroty:crate::client::message::Priority ) -> Self {
match prioroty {
crate::client::message::Priority::High => Self::High,
crate::client::message::Priority::Normal => Self::Normal,
}
}
}
impl From<crate::client::message::Message> for Message{
fn from(message: crate::client::message::Message) -> Self {
if let Some(meta) = message.meta{
return Self{
data: message.data,
notification: message.notification.map(|notification| notification.into()),
collapser_key: meta.collapser_key,
content_available: meta.content_available,
delay_while_idle: meta.delay_while_idle,
dry_run: meta.dry_run,
priority: meta.priority.map(|priority| priority.into()),
restricted_package_name: meta.restricted_package_name,
time_to_live: meta.time_to_live,
to: None,
mutable_content: meta.mutable_content,
};
}
Self{
data: message.data,
notification: message.notification.map(|notification| notification.into()),
to: None,
collapser_key: None,
content_available: None,
delay_while_idle: None,
dry_run: None,
priority: None,
restricted_package_name: None,
time_to_live: None,
mutable_content: None,
}
}
}