4 个版本 (2 个重大变更)
0.3.0 | 2023年3月26日 |
---|---|
0.2.0 | 2018年10月28日 |
0.1.1 | 2018年8月13日 |
0.1.0 | 2018年8月13日 |
#4 在 #binance
每月 33 次下载
77KB
2K SLoC
binance-async
异步/Await 和易用设计的 Binance API 的非官方 Rust 库。
此库借鉴了 Flavio Oliveira (wisespace-io) 的 作品。感谢他的优秀库!
此仓库处于早期阶段,并非所有请求/网络套接字都已实现。然而,相关机制已经存在:添加对新请求/网络套接字事件的支持只需 几行代码。PR 非常受欢迎!
风险提示
这是一个个人项目,使用风险自负。我不会对您的投资损失负责。加密货币投资存在很高的市场风险。
MSRV
Rust 1.60
用法
此库刚刚恢复。请现在使用 git 版本。
将以下内容添加到您的 Cargo.toml
[dependencies]
binance-async = 0.2
示例位于示例文件夹中。
examples/websocket.rs
:订阅市场数据和用户数据的网络套接字。examples/new_order_and_cancel.rs
:创建一个新订单然后取消它。
易用设计
此库的设计遵循基于 struct-的请求/响应
模式。这使得 API 请求易于使用和理解。
例如,要创建新订单,您需要填写 OrderRequest
结构体,它定义为
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct OrderRequest {
pub symbol: String,
pub qty: Decimal,
pub price: Decimal,
pub stop_price: Option<Decimal>,
pub order_side: OrderSide,
pub order_type: OrderType,
pub time_in_force: TimeInForce,
pub new_client_order_id: Option<String>,
}
您只需填写要填写的字段,其余的留给 Default
。例如。
let req = OrderRequest {
symbol: "btcusd".into(),
qty: 3.try_into().unwrap(),
price: 20000.try_into().unwrap(),
..Default::default()
};
let client = Binance::new();
client.request(req).await?;
这避免了库中有大量用于不同参数组合的方法。
方便背后的魔力在于 Request
特性。例如,OrderRequest
将 Request
实现,如下所示。
impl Request for OrderRequest {
const API: APIUrl = APIUrl::Spot;
const ENDPOINT: &'static str = "/api/v3/order";
const METHOD: Method = Method::POST;
const SIGNED: bool = true;
type Response = OrderInfo;
}
这为每个请求结构体关联必要的信息。
缺少端点?您可以轻松添加!
由于 Binance 提供的 API 数量众多,因此很难覆盖此库的所有内容。
然而,由于这个库使用了基于struct-based Request/Response
模式的模式,添加新的请求非常简单。你只需要在源代码中添加一个新的Request
结构和一个新的Response
结构,并将Request
特质实现到新添加的Request
结构中。
例如,添加GET /fapi/v1/positionSide/dual
只需这样做
#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize)]
pub struct GetCurrentPositionModeRequest {}
#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GetCurrentPositionModeResponse {
dual_side_position: bool,
}
impl Request for GetCurrentPositionModeRequest {
const API: APIUrl = APIUrl::UsdMFutures;
const ENDPOINT: &'static str = "/fapi/v1/positionSide/dual";
const METHOD: Method = Method::GET;
const SIGNED: bool = true;
type Response = GetCurrentPositionModeResponse;
}
或者,为了使其更简单,使用宏(查看操作)
crate::define_request! {
Name => GetCurrentPositionMode;
Product => Product::UsdMFutures;
Endpoint => "/fapi/v1/positionSide/dual";
Method => Method::GET;
Signed => true;
Request => {};
Response => {
pub dual_side_position: bool,
};
}
依赖项
~8–22MB
~359K SLoC