zero4rs 2.0.0

zero4rs is a powerful, pragmatic, and extremely fast web framework for Rust
Documentation
use serde::{Deserialize, Serialize};
use std::str::FromStr;

#[derive(Serialize, Deserialize, Debug)]
pub struct SubscribeData {
    pub channel: SubscribeChannel,
}

impl SubscribeData {
    pub fn parse(data: &Option<serde_json::Value>) -> Result<Self, String> {
        if let Some(data) = data {
            match crate::commons::get_value_as_string(data, "channel") {
                Ok(Some(c)) => match SubscribeChannel::from_str(&c) {
                    Ok(channel) => Ok(Self { channel }),
                    Err(_) => Err(format!("invalid data.channel: {}", c)),
                },
                Ok(None) => Err("data.channel is required".to_string()),
                Err(err) => Err(format!("invalid data.channel: error={}", err)),
            }
        } else {
            Err("data field is required".to_string())
        }
    }
}

#[derive(serde::Serialize, serde::Deserialize, Clone, Debug, strum_macros::EnumString)]
#[strum(ascii_case_insensitive)]
pub enum SubscribeChannel {
    ServerTime,
}

impl std::fmt::Display for SubscribeChannel {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        match self {
            SubscribeChannel::ServerTime => write!(f, "ServerTime"),
        }
    }
}