3 个不稳定版本
0.2.0 | 2024 年 4 月 9 日 |
---|---|
0.1.1 | 2024 年 4 月 4 日 |
0.1.0 | 2024 年 4 月 2 日 |
#244 in HTTP 客户端
每月 71 次下载
19KB
438 代码行
reqwest-enum
类型安全且具有枚举风格的 Rust API,一些好处
- 它抽象掉了重复的样板代码,如 URL 格式化、查询/头编码和响应反序列化。
- 类型安全的端点,可读性强,像规范一样,易于添加新端点或重构现有端点。
- 默认异步且轻量级 JSON-RPC 支持。
特性
- 类型安全和枚举风格的 HTTP API
- 支持批处理的 JSON-RPC
- ...
安装
cargo add reqwest-enum
或将其添加到您的 Cargo.toml
[dependencies]
reqwest-enum = "0.2.0"
示例
httpbin.org
- 将 https://httbin.org 作为枚举定义端点
pub enum HttpBin {
Get,
Post,
Bearer,
}
- 为枚举实现
Target
pub trait Target {
fn base_url(&self) -> &'static str;
fn method(&self) -> HTTPMethod;
fn path(&self) -> &'static str;
fn query(&self) -> HashMap<&'static str, &'static str>;
fn headers(&self) -> HashMap<&'static str, &'static str>;
fn authentication(&self) -> Option<AuthMethod>;
fn body(&self) -> HTTPBody;
}
- 创建提供者和请求
let provider = Provider::<HttpBin>::default();
let response = provider.request(HttpBin::Get).await.unwrap();
assert_eq!(response.status(), 200);
JSON-RPC
完整示例请见 examples/ethereum-rpc。
- 将以太坊 JSON-RPC 方法定义为枚举
pub enum EthereumRPC {
ChainId,
GasPrice,
BlockNumber,
GetBalance(&'static str),
GetBlockByNumber(&'static str, bool),
GetTransactionCount(&'static str, BlockParameter),
Call(TransactionObject, BlockParameter),
EstimateGas(TransactionObject),
SendRawTransaction(&'static str),
}
- 为枚举实现
Target
和JsonRpcTarger
pub trait JsonRpcTarget: Target {
fn method_name(&self) -> &'static str;
fn params(&self) -> Vec<Value>;
}
- 创建提供者和请求
let provider = Provider::<EthereumRPC>::default();
let response: JsonRpcResponse<String> =
provider.request_json(EthereumRPC::ChainId).await.unwrap();
assert_eq!(response.result, "0x1");
许可证
致谢
依赖关系
~4–17MB
~212K SLoC