1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2018 年 6 月 16 日 |
---|
#45 在 #stub
14KB
222 行
hyper-stub
hyper-stub 是一个 Rust 库,提供创建 hyper 客户端的函数,这些客户端使用预定义的函数将请求转换为响应,而不进行任何实际的网络操作。这意味着整个请求/响应生命周期都在单个进程中发生,并且应该比例如绑定到端口等有性能和稳定性改进。这种用例的一个潜在用途是在测试中模拟 HTTP 交互,以避免缓慢/不可靠/不存在的互联网连接。
有关 API 参考和使用示例,请参阅 文档。
lib.rs
:
hyper-stub 提供创建 hyper 客户端的函数,这些客户端使用预定义的函数将请求转换为响应,而不进行任何实际的网络操作。这意味着整个请求/响应生命周期都在单个进程中发生,并且应该比例如绑定到端口等有性能和稳定性改进。这种用例的一个潜在用途是在测试中模拟 HTTP 交互,以避免缓慢/不可靠/不存在的互联网连接。
最简单的情况是使用 proxy_client_fn_ok
创建一个绑定到简单函数的客户,该函数直接将请求映射到响应
#
use futures::{Future, Stream};
use hyper::{Request, Response, Uri};
use hyper_stub::proxy_client_fn_ok;
use tokio::runtime::current_thread::Runtime;
let echo_client = proxy_client_fn_ok(|request| {
let body = request.into_body();
Response::new(body)
});
let url: Uri = "http://example.com".parse().unwrap();
let mut builder = Request::post(url);
let request = builder.body("hello world".into()).unwrap();
let future = echo_client.request(request)
.and_then(|res| res.into_body().concat2())
.map(|bytes| {
let body = String::from_utf8(bytes.to_vec()).unwrap();
println!("{}", body);
})
.map_err(|error| panic!("ERROR: {:?}", error));
Runtime::new().unwrap().block_on(future).unwrap();
如果函数需要返回错误,或异步响应用户请求,可以使用 proxy_client_fn
。
最后,一个高级用例是使用 hyper services
而不是简单函数。这可以通过 proxy_client
函数完成。
依赖项
~8MB
~129K SLoC