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 meta: Option<Meta>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Builder)]
pub struct Meta{
#[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 mutable_content: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum Priority {
High,
Normal,
}