puzz 0.2.0

A simple and powerful web framework.
Documentation
use puzz_core::body::BodyExt;
use puzz_core::http::{header, HeaderValue, StatusCode};
use puzz_core::response::{IntoResponse, Response};
use serde::Serialize;

pub fn json<T>(t: T) -> Json<T> {
    Json(t)
}

#[derive(Debug, Clone, Copy)]
pub struct Json<T>(pub T);

impl<T> IntoResponse for Json<T>
where
    T: Serialize,
{
    fn into_response(self) -> Response {
        match serde_json::to_vec(&self.0) {
            Ok(bytes) => {
                let mut res = Response::new(bytes.boxed());
                res.headers_mut().insert(
                    header::CONTENT_TYPE,
                    HeaderValue::from_static(mime::APPLICATION_JSON.as_ref()),
                );
                res
            }
            Err(_) => StatusCode::INTERNAL_SERVER_ERROR.into_response(),
        }
    }
}