mini-serve 0.9.0

An HTTP server: trie router, middleware, CORS, optional TLS. Built on hyper + tokio.
Documentation
use hyper::{Response, StatusCode};
use http_body_util::combinators::BoxBody;
use http_body_util::{BodyExt, Full};
use hyper::body::Bytes;
use serde::Serialize;

use crate::error::ServeError;
use crate::handler::ResponseBody;

/// Build a JSON response with the given status code and serializable value.
///
/// Sets `Content-Type: application/json` and `Content-Length` headers.
/// Returns `500 Internal Server Error` if serialization fails.
pub fn json<T: Serialize>(status: StatusCode, value: &T) -> Result<Response<ResponseBody>, ServeError> {
	let body = serde_json::to_string(value)
		.map_err(|_| ServeError::new(500, "failed to serialize response"))?;
	let len = body.len();
	Response::builder()
		.status(status)
		.header("content-type", "application/json")
		.header("content-length", len)
		.body(BoxBody::new(Full::new(Bytes::from(body)).map_err(|never: std::convert::Infallible| match never {})))
		.map_err(|_| ServeError::new(500, "failed to build response"))
}