2个版本
0.1.2 | 2022年4月3日 |
---|---|
0.1.1 | 2022年3月31日 |
0.1.0 |
|
#14 in #http-router
38KB
972 行
tackt
为tower服务提供的HTTP路由器。
查看文档。
lib.rs
:
tackt
为tower服务提供的HTTP路由器。
使用概述
use tackt::route;
use tackt::routes;
#[route(GET, PUT: "entity" / id / "resource" / path*)]
async fn resource(
req: http::Request<hyper::Body>,
id: i32,
path: String,
) -> Result<http::Response<hyper::Body>, Box<dyn std::error::Error>> {
let content = format!("resource: {id} {path}");
let body = hyper::Body::from(content);
let response = http::Response::new(body);
Ok(response)
}
let router = routes![resource];
// use the `router` in `hyper::service::make_service_fn`.
注意: #[route]
属性会改变函数签名。
路由规范示例
-
空
此规范将在任何方法上与
"/"
完全匹配。#[route]
-
仅方法
此规范将仅在
GET
或PUT
请求上与"/"
完全匹配。#[route(GET, PUT)]
-
仅段
此规范将在任何方法上与
"/path/to/somewhere"
完全匹配。#[route("path" / "to" / "somewhere")]
-
方法和段
此规范将仅在
GET
请求上与"/path/to/somewhere"
完全匹配。#[route(GET: "path" / "to" / "somewhere")]
路由语法
spec: methods ':' segments
/ methods
/ segments
/ empty
methods: identifier [',' identifier]*
segments: segment ['/' segment]* ['/' rest]
segment: literal-str / identifier
rest: identifier '*'
empty:
依赖项
~0.8–1.4MB
~27K SLoC