875428575@qq.com пре 2 година
родитељ
комит
1a991dca1a

+ 17 - 6
exchanges/src/gate_swap_rest.rs

@@ -7,10 +7,11 @@ use reqwest::Client;
 use rust_decimal::Decimal;
 use rust_decimal::prelude::FromPrimitive;
 use rust_decimal_macros::dec;
+use serde_json::Value;
 use crate::http_tool::RestTool;
 use crate::response_base::ResponseData;
 use sha2::Sha512;
-use tracing::trace;
+use tracing::{error, trace};
 
 #[derive(Clone)]
 pub struct GateSwapRest {
@@ -550,11 +551,21 @@ impl GateSwapRest {
             Ok(res_data) => {
                 if res_data.code != "200" {
                     let message = res_data.message;
-                    let json_value: serde_json::Value = serde_json::from_str(&message).unwrap();
-                    let label = json_value["label"].as_str().unwrap();
-                    let mut error = ResponseData::error(res_data.label, label.parse().unwrap());
-                    error.data = format!("请求地址:{},请求参数:{}", base_url, params);
-                    error
+                    // let json_value: serde_json::Value = serde_json::from_str(&message).unwrap();//这种方式会触发 解析错误
+                    let json_value = serde_json::from_str::<Value>(&message);
+                    match json_value {
+                        Ok(data) => {
+                            let label = data["label"].as_str().unwrap();
+                            let mut error = ResponseData::error(res_data.label, label.parse().unwrap());
+                            error.data = format!("请求地址:{},请求参数:{}", base_url, params);
+                            error
+                        }
+                        Err(e) => {
+                            error!("解析错误:{:?}",e);
+                            let error = ResponseData::error("".to_string(), format!("json 解析失败:{},相关参数:{}", e, message));
+                            error
+                        }
+                    }
                 } else {
                     res_data
                 }

+ 40 - 23
exchanges/tests/gate_swap_test.rs

@@ -17,32 +17,49 @@ const SECRET_KEY: &str = "";
 //ws-订阅公共频道信息
 #[tokio::test(flavor = "multi_thread", worker_threads = 2)]
 async fn ws_custom_subscribe() {
-    global::log_utils::init_log_with_trace();
+    // global::log_utils::init_log_with_trace();
+    //
+    // let mut bool_v1 = Arc::new(AtomicBool::new(true));
+    // let mut btree_map: BTreeMap<String, String> = BTreeMap::new();
+    // btree_map.insert("access_key".to_string(), ACCESS_KEY.to_string());
+    // btree_map.insert("secret_key".to_string(), SECRET_KEY.to_string());
+    // let (tx, mut rx) = channel(1024);
+    // let mut ws = get_ws(btree_map, tx);
+    // ws.set_subscribe(vec![
+    //     GateSubscribeType::PuFuturesCandlesticks,
+    //     GateSubscribeType::PuFuturesTrades,
+    //     GateSubscribeType::PuFuturesOrderBook,
+    //
+    //     GateSubscribeType::PrFuturesPositions("".to_string()),
+    // ]);
+    // let t1 = tokio::spawn(async move {
+    //     ws.custom_subscribe(bool_v1, vec!["BTC_USDT".to_string()]).await;
+    // });
+    // let t2 = tokio::spawn(async move {
+    //     loop {
+    //         if let Ok(received) = rx.try_recv() {
+    //             trace!( "age: {:?}", received);
+    //         }
+    //     }
+    // });
+    // try_join!(t1,t2).unwrap();
+
 
-    let mut bool_v1 = Arc::new(AtomicBool::new(true));
-    let mut btree_map: BTreeMap<String, String> = BTreeMap::new();
-    btree_map.insert("access_key".to_string(), ACCESS_KEY.to_string());
-    btree_map.insert("secret_key".to_string(), SECRET_KEY.to_string());
-    let (tx, mut rx) = channel(1024);
-    let mut ws = get_ws(btree_map, tx);
-    ws.set_subscribe(vec![
-        GateSubscribeType::PuFuturesCandlesticks,
-        GateSubscribeType::PuFuturesTrades,
-        GateSubscribeType::PuFuturesOrderBook,
 
-        GateSubscribeType::PrFuturesPositions("".to_string()),
-    ]);
-    let t1 = tokio::spawn(async move {
-        ws.custom_subscribe(bool_v1, vec!["BTC_USDT".to_string()]).await;
-    });
-    let t2 = tokio::spawn(async move {
-        loop {
-            if let Ok(received) = rx.try_recv() {
-                trace!( "age: {:?}", received);
-            }
+    let json_str = r#"{"name": "Alice", "age": 30}"#;
+
+    // 解析 JSON 字符串并将其转换为一个 Rust 结构体
+    let parsed_data: Result<serde_json::Value, serde_json::Error> = serde_json::from_str(json_str);
+
+    match parsed_data {
+        Ok(data) => {
+            println!("Name: {}", data["name"]);
+            println!("Age: {}", data["age"]);
+        }
+        Err(e) => {
+            println!("Failed to parse JSON: {}", e);
         }
-    });
-    try_join!(t1,t2).unwrap();
+    }
 }
 
 

+ 1 - 0
exchanges/tests/kucoin_swap_test.rs

@@ -85,6 +85,7 @@ async fn rest_get_server_time_test() {
     trace!(?rep_data)
 }
 
+
 async fn get_ws(btree_map: BTreeMap<String, String>, type_v: KucoinWsType, tx: Sender<ResponseData>) -> KucoinSwapWs {
     let mut ku_ws = KucoinSwapWs::new(false, btree_map.clone(),
                                       type_v, tx).await;

+ 2 - 1
exchanges/tests/test.rs

@@ -28,6 +28,7 @@ async fn test_import() {
         trace!("检测有代理配置,配置走代理");
     }
 
+
     //获取代理
     // demo_get_http_proxy();
 
@@ -37,7 +38,7 @@ async fn test_import() {
     // demo_rest_ba().await;
 
     //gate-rest -账户信息
-    demo_rest_gate().await;
+    // demo_rest_gate().await;
     //gate-ws-public-private频道
     // demo_ws_gate().await;