zero4rs 2.0.0

zero4rs is a powerful, pragmatic, and extremely fast web framework for Rust
Documentation
use std::fmt;

// use crate::core::errors::Errors;
use typed_builder::TypedBuilder;

// 类型别名,简化使用
// pub type Result<T> = std::result::Result<T, Errors>;

#[derive(Debug, serde::Serialize, serde::Deserialize, TypedBuilder)]
pub struct R<T> {
    pub code: u16,
    pub message: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub data: Option<T>,
}

impl<T: serde::Serialize> R<T> {
    pub fn ok(data: T) -> Self {
        R::<T> {
            code: 200,
            message: "Ok".to_string(),
            data: Some(data),
        }
    }

    pub fn success(data: T, message: impl Into<String>) -> Self {
        R::<T> {
            code: 200,
            message: message.into(),
            data: Some(data),
        }
    }
}

impl R<bool> {
    pub fn failed(code: u16, message: impl Into<String>) -> R<bool> {
        R::<bool> {
            code,
            message: message.into(),
            data: None,
        }
    }

    pub fn invalid(message: impl Into<String>) -> R<bool> {
        R::<bool> {
            code: 413,
            message: message.into(),
            data: None,
        }
    }

    pub fn empty() -> R<Option<bool>> {
        R::<Option<bool>>::ok(None)
    }
}

impl<T> fmt::Display for R<T>
where
    T: fmt::Display + fmt::Debug,
{
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "{:?}", self)
    }
}