2个版本

0.1.2 2022年4月3日
0.1.1 2022年3月31日
0.1.0 2022年3月31日

#14 in #http-router

GPL-3.0-or-later

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] 属性会改变函数签名。

路由规范示例

  1. 此规范将在任何方法上与 "/" 完全匹配。

    #[route]
    
  2. 仅方法

    此规范将仅在 GETPUT 请求上与 "/" 完全匹配。

    #[route(GET, PUT)]
    
  3. 仅段

    此规范将在任何方法上与 "/path/to/somewhere" 完全匹配。

    #[route("path" / "to" / "somewhere")]
    
  4. 方法和段

    此规范将仅在 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