1 个不稳定版本
0.1.0 | 2022年10月23日 |
---|
#2028 in 数据结构
19KB
410 代码行
Hyper Tree Router
使用前缀树(trie)进行路径查找的Hyper http库的路由中间件。它能够为指定的请求路径定义路由和处理程序
用法
要使用此库,请将其添加到您的 Cargo.toml
hyper = { version = "^0.14", features = ["http1", "server", "tcp"] }
hyper-tree-router = "^0.1"
然后您可以定义如下给定路由的处理程序。以下代码创建两个 Route
并为它们创建一个Hyper服务器。
/
使用 hello_handler
,当您打开服务器时将返回 "Hello world"。
/user/:user_id/home
使用 user_handler
,url_params
包含一个包含URL参数的哈希表,您可以查找并响应这些参数。
use hyper::{
header::{CONTENT_LENGTH, CONTENT_TYPE},
Body, Request, Response, Server,
};
use hyper_tree_router::{Route, RouterBuilder, UrlParams};
fn plain_text_response(body: String) -> Response<Body> {
Response::builder()
.header(CONTENT_LENGTH, body.len() as u64)
.header(CONTENT_TYPE, "text/plain")
.body(Body::from(body))
.expect("Failed to construct response")
}
fn user_handler(url_params: UrlParams, _: Request<Body>) -> Response<Body> {
let body = format!(
"user: {}",
url_params
.captures
.get(":user_id")
.unwrap_or(&"unknown user".to_string())
);
plain_text_response(body)
}
fn hello_handler(_: UrlParams, _: Request<Body>) -> Response<Body> {
plain_text_response("Hello World".to_string())
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
let addr = "0.0.0.0:8080".parse().unwrap();
let router = RouterBuilder::new()
.route(Route::url("/user/:user_id/home").get(user_handler))
.route(Route::url("/").get(hello_hanlder))
.build();
let server = Server::bind(&addr).serve(router);
println!("Listening on http://{}", addr);
server.await?;
Ok(())
}
依赖项
~5–16MB
~157K SLoC