mob_push 0.2.1

notify pusher using Mob Push
Documentation
use serde::ser::SerializeStruct;

use crate::push_notify::NotifySerialize;
#[derive(Debug, Clone)]
pub enum IosRichTextType {
    None,
    Picture(String),
    Video(String),
    Voice(String),
}

impl NotifySerialize for IosRichTextType {
    fn serialize_field(&self) -> usize {
        match self {
            IosRichTextType::None => 1,
            IosRichTextType::Picture(_) | IosRichTextType::Video(_) | IosRichTextType::Voice(_) => {
                3
            }
        }
    }

    fn serialize<S: serde::Serializer>(
        &self,
        struct_serialize: &mut <S as serde::Serializer>::SerializeStruct,
    ) -> Result<(), <S as serde::Serializer>::Error> {
        let enable = if let IosRichTextType::None = self {
            0
        } else {
            1
        };
        struct_serialize.serialize_field("mutableContent", &enable)?;

        match self {
            IosRichTextType::None => Ok(()),
            IosRichTextType::Picture(image_url) => {
                struct_serialize.serialize_field("attachmentType", &1)?;
                struct_serialize.serialize_field("attachment", image_url)
            }
            IosRichTextType::Video(video_url) => {
                struct_serialize.serialize_field("attachmentType", &2)?;
                struct_serialize.serialize_field("attachment", video_url)
            }
            IosRichTextType::Voice(voice_url) => {
                struct_serialize.serialize_field("attachmentType", &3)?;
                struct_serialize.serialize_field("attachment", voice_url)
            }
        }
    }
}