rs-ray 0.0.4

A rust crate for Spatie Ray
Documentation
use serde::{ser::SerializeStruct, Serialize, Serializer};

#[derive(Debug, Clone)]
pub enum Payload {
    Log(LogPayload),
    Text(TextPayload),
    Confetti,
    ClearAll,
    Color(ColorPayload),
}

impl From<TextPayload> for Payload {
    fn from(payload: TextPayload) -> Self {
        Self::Text(payload)
    }
}
impl From<ColorPayload> for Payload {
    fn from(payload: ColorPayload) -> Self {
        Self::Color(payload)
    }
}
impl From<LogPayload> for Payload {
    fn from(payload: LogPayload) -> Self {
        Self::Log(payload)
    }
}

impl serde::Serialize for Payload {
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: Serializer,
    {
        match self {
            Payload::Log(LogPayload { values, label }) => {
                let mut payload = serializer.serialize_struct("Payload", 2)?;
                payload.serialize_field("values", values)?;
                payload.serialize_field("label", label)?;
                payload.end()
            }
            Payload::Text(TextPayload { content, label }) => {
                let mut payload = serializer.serialize_struct("Payload", 2)?;
                payload.serialize_field("content", content)?;
                payload.serialize_field("label", label)?;
                payload.end()
            }
            Payload::Color(ColorPayload { color }) => {
                let mut payload = serializer.serialize_struct("Payload", 1)?;
                payload.serialize_field("color", color)?;
                payload.end()
            }
            Payload::Confetti => {
                let payload = serializer.serialize_struct("Payload", 1)?;
                payload.end()
            }
            Payload::ClearAll => {
                let payload = serializer.serialize_struct("Payload", 1)?;
                payload.end()
            }
        }
    }
}

#[derive(Serialize, Debug, Clone)]
pub struct LogPayload {
    pub values: Vec<String>,
    pub label: String,
}

#[derive(Serialize, Debug, Clone)]
pub struct TextPayload {
    pub content: String,
    pub label: String,
}

#[derive(Serialize, Debug, Clone)]
pub struct ColorPayload {
    pub color: String,
}