1 个不稳定版本
使用旧的 Rust 2015
0.0.1 | 2018年8月6日 |
---|
#9 在 #akka
4KB
warp-dsl
用于编写 warp 路由的 DSL,灵感来自 Akka HTTP。
目前,这个实现只是一个概念验证。
它在 Rust 稳定版上工作,使用 proc-macro-hack。
入门指南
-
将以下依赖项添加到您的
Cargo.toml
[dependencies] warp = "0.1" warp_dsl = "0.0.1"
-
使用
#[macro_use]
声明这两个 crate#[macro_use] extern crate warp; #[macro_use] extern crate warp_dsl;
-
编写一些路由
use warp::Filter; fn main() { let routes = router!( path("foo" / u64) |num| { get { complete { format!("GET /foo/{}\n", num) } } post { complete { format!("POST /foo/{}\n", num) } } } ); warp::serve(routes).run(([0; 4], 3030)); }
然后,键入 cargo run
来启动具有这些路由的 HTTP 服务器。
$ cargo run &
$ curl -X POST localhost:3030/foo/1
POST /foo/1
编写路由
本节只是一个草案。需要进一步扩展。
此 crate 使用 Akka HTTP 中的 指令 概念。
一些常见的 过滤器 被解析器识别
指令 | 表达式 |
---|---|
path(...) |
path!(...) |
index |
warp::index() |
get , post , put , … |
HTTP 方法 |
cookie("..") |
::warp::filters::cookie::cookie |
cookie(optional"..") |
::warp::filters::cookie::optional |
任何函数都可以用作指令,如果
- 它返回一个
Filter
。 - 表达式被括号包围。
嵌套指令通过使用 Filter::and
组合。同一级别的指令通过使用 Filter::or
组合。
可以使用 &
运算符组合嵌套指令。 foo & bar { ... }
等同于 foo { bar { ... } }
。
HTTP方法已移动到过滤器的顶部,因为在wrap 0.1版本中,它们不能与and()
一起使用。
响应是通过使用complete
指令来设置的。
调试
如果您在编写路由时遇到问题,验证生成的代码可能会有所帮助。将WARPDSL_DEBUG
设置为output
,那么每次调用router!()
的代码都会打印到stderr。
使用入门部分的代码,您会得到以下输出
======== [DEBUG:OUTPUT] ========
(((::warp::get((path!("foo" / u64)).map(|num| {format ! ( "GET /foo/{}\n" , num )}))))
.or((::warp::post((path!("foo" / u64)).map(|num| {format ! ( "POST /foo/{}\n" , num )})))))
================================
依赖项
~225KB