push-messaging 0.1.1

Push Messaging package
Documentation
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,
            
        }
    }
}