81 个版本
0.9.2 | 2024年7月19日 |
---|---|
0.8.0 | 2024年2月12日 |
0.5.1 | 2023年10月9日 |
0.3.2 | 2023年7月6日 |
0.0.5 | 2019年10月30日 |
#88 在 HTTP服务器 中
每月下载量342次
110KB
2.5K SLoC
梅德斯:专为迫不及待的完美主义者设计的Web工具包
梅德斯是一个专为迫不及待的完美主义者设计的Rust Web工具包(向Django道歉)。它的目标是
- 模块化:更少的框架,更多的库;挑选和选择组件
- 异步:从开始就是异步/await
- 低模板:易于开始,但“魔法”有限
- 类型安全:利用类型系统来降低错误处理的工作量
- 安全:默认提供安全性;本项目没有不安全代码
- 在稳定的Rust上运行(尽管没有关于MSRV的承诺)
梅德斯目前处于极早期阶段,可能对任何人都不适合,但对于好奇的人来说可能仅适合实验。不过,欢迎提供反馈!
最小示例
随着时间的推移,这肯定变得更加简化。
use async_trait::async_trait;
use hyper::Body;
use mendes::application::IntoResponse;
use mendes::http::request::Parts;
use mendes::http::{Response, StatusCode};
use mendes::{handler, route, Application, Context};
#[handler(GET)]
async fn hello(_: &App) -> Result<Response<Body>, Error> {
Ok(Response::builder()
.status(StatusCode::OK)
.body("Hello, world".into())
.unwrap())
}
struct App {}
#[async_trait]
impl Application for App {
type RequestBody = ();
type ResponseBody = Body;
type Error = Error;
async fn handle(mut cx: Context<Self>) -> Response<Body> {
route!(match cx.path() {
_ => hello,
})
}
}
#[derive(Debug)]
enum Error {
Mendes(mendes::Error),
}
impl From<mendes::Error> for Error {
fn from(e: mendes::Error) -> Self {
Error::Mendes(e)
}
}
impl From<&Error> for StatusCode {
fn from(e: &Error) -> StatusCode {
let Error::Mendes(e) = e;
StatusCode::from(e)
}
}
impl IntoResponse<App> for Error {
fn into_response(self, _: &App, _: &Parts) -> Response<Body> {
let Error::Mendes(err) = self;
Response::builder()
.status(StatusCode::from(&err))
.body(err.to_string().into())
.unwrap()
}
}
欢迎所有反馈。请随意提交错误报告、文档请求和其他任何反馈到 问题跟踪器。
梅德斯由Dirkjan Ochtman创建并维护。
依赖项
~0.3–13MB
~193K SLoC