|
|
@@ -7,6 +7,7 @@ use crate::http_tool::RestTool;
|
|
|
use crate::response_base::ResponseData;
|
|
|
use ring::hmac;
|
|
|
use rust_decimal::prelude::FromPrimitive;
|
|
|
+use serde_json::Value;
|
|
|
|
|
|
#[derive(Clone, Debug)]
|
|
|
pub struct BitgetSwapRest {
|
|
|
@@ -49,6 +50,94 @@ impl BitgetSwapRest {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 获取账户信息
|
|
|
+ pub async fn get_account_info(&mut self) -> ResponseData {
|
|
|
+ let params = serde_json::json!({
|
|
|
+ "productType": "USDT-FUTURES"
|
|
|
+ });
|
|
|
+
|
|
|
+ self.request("GET".to_string(),
|
|
|
+ "/api/v2".to_string(),
|
|
|
+ "/mix/account/accounts".to_string(),
|
|
|
+ true,
|
|
|
+ params.to_string(),
|
|
|
+ ).await
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取仓位信息(单个)
|
|
|
+ pub async fn get_single_position(&mut self, params: Value) -> ResponseData {
|
|
|
+ self.request("GET".to_string(),
|
|
|
+ "/api/v2".to_string(),
|
|
|
+ "/mix/position/single-position".to_string(),
|
|
|
+ true,
|
|
|
+ params.to_string(),
|
|
|
+ ).await
|
|
|
+ }
|
|
|
+
|
|
|
+ // 下单
|
|
|
+ pub async fn swap_order(&mut self, params: Value) -> ResponseData {
|
|
|
+ self.request("POST".to_string(),
|
|
|
+ "/api/v2".to_string(),
|
|
|
+ "/mix/order/place-order".to_string(),
|
|
|
+ true,
|
|
|
+ params.to_string(),
|
|
|
+ ).await
|
|
|
+ }
|
|
|
+
|
|
|
+ // 撤单
|
|
|
+ pub async fn cancel_order(&mut self, params: Value) -> ResponseData {
|
|
|
+ self.request("POST".to_string(),
|
|
|
+ "/api/v2".to_string(),
|
|
|
+ "/mix/order/cancel-order".to_string(),
|
|
|
+ true,
|
|
|
+ params.to_string(),
|
|
|
+ ).await
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取订单详情
|
|
|
+ pub async fn get_order(&mut self, params: Value) -> ResponseData {
|
|
|
+ self.request("GET".to_string(),
|
|
|
+ "/api/v2".to_string(),
|
|
|
+ "/mix/order/detail".to_string(),
|
|
|
+ true,
|
|
|
+ params.to_string(),
|
|
|
+ ).await
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取当前未成交订单
|
|
|
+ pub async fn get_pending_orders(&mut self) -> ResponseData {
|
|
|
+ let params = serde_json::json!({
|
|
|
+ "productType": "USDT-FUTURES"
|
|
|
+ });
|
|
|
+
|
|
|
+ self.request("GET".to_string(),
|
|
|
+ "/api/v2".to_string(),
|
|
|
+ "/mix/order/orders-pending".to_string(),
|
|
|
+ true,
|
|
|
+ params.to_string(),
|
|
|
+ ).await
|
|
|
+ }
|
|
|
+
|
|
|
+ // 调整杠杆
|
|
|
+ pub async fn set_leverage(&mut self, params: Value) -> ResponseData {
|
|
|
+ self.request("POST".to_string(),
|
|
|
+ "/api/v2".to_string(),
|
|
|
+ "/mix/account/set-leverage".to_string(),
|
|
|
+ true,
|
|
|
+ params.to_string(),
|
|
|
+ ).await
|
|
|
+ }
|
|
|
+
|
|
|
+ // 调整持仓模式(单向、双向)
|
|
|
+ pub async fn set_position_mode(&mut self, params: Value) -> ResponseData {
|
|
|
+ self.request("POST".to_string(),
|
|
|
+ "/api/v2".to_string(),
|
|
|
+ "/mix/account/set-position-mode".to_string(),
|
|
|
+ true,
|
|
|
+ params.to_string(),
|
|
|
+ ).await
|
|
|
+ }
|
|
|
+
|
|
|
// 发送请求
|
|
|
pub async fn request(&mut self,
|
|
|
method: String,
|
|
|
@@ -89,7 +178,7 @@ impl BitgetSwapRest {
|
|
|
//是否需要登陆-- 组装sing
|
|
|
if is_login {
|
|
|
if !is_login_param {
|
|
|
- let e = ResponseData::error(self.label.clone(), "登陆参数错误!".to_string());
|
|
|
+ let e = ResponseData::error(self.label.clone(), "登录参数错误!".to_string());
|
|
|
return e;
|
|
|
} else {
|
|
|
//需要登陆-且登陆参数齐全
|
|
|
@@ -130,11 +219,12 @@ impl BitgetSwapRest {
|
|
|
match result {
|
|
|
Ok(res_data) => {
|
|
|
if res_data.code != "200" {
|
|
|
+ info!(?res_data);
|
|
|
let json_value = res_data.data;
|
|
|
- let code = json_value["code"].as_str().unwrap();
|
|
|
+ let code = res_data.code;
|
|
|
let error = ResponseData::new("".to_string(),
|
|
|
format!("{}", code),
|
|
|
- format!("请求地址:{}, 请求参数:{}, 响应结果:{}", base_url, params, json_value.as_str().unwrap()),
|
|
|
+ format!("请求地址:{}, 请求参数:{}, 响应结果:{}", base_url, params, res_data.message),
|
|
|
json_value);
|
|
|
error
|
|
|
} else {
|
|
|
@@ -232,8 +322,7 @@ impl BitgetSwapRest {
|
|
|
// 对请求进行签名处理
|
|
|
pub fn sign(secret_key: String,
|
|
|
method: String, prefix_url: String, request_url: String,
|
|
|
- params: String, body: String, timestamp: String) -> String
|
|
|
- {
|
|
|
+ params: String, body: String, timestamp: String) -> String {
|
|
|
let url_param_str = RestTool::parse_params_to_str(params);
|
|
|
let base_url = if method == "GET" && url_param_str.len() > 0 {
|
|
|
format!("{}{}?{}", prefix_url, request_url, url_param_str)
|