Skip to content

Commit 90b45bc

Browse files
committed
WIP
Signed-off-by: Herklos <herklos@drakkar.software>
1 parent be9395a commit 90b45bc

103 files changed

Lines changed: 4683 additions & 4491 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

build/rustTranspiler.ts

Lines changed: 39 additions & 26 deletions
Large diffs are not rendered by default.

rust/src/exchange.rs

Lines changed: 200 additions & 21 deletions
Large diffs are not rendered by default.

rust/src/exchanges/alp.rs

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -391,22 +391,22 @@ pub trait Alp : Exchange {
391391
}
392392
}
393393
let mut dynamic_calls: Vec<(String, String, String)> = vec![];
394-
if let Value::Json(serde_json::Value::Object(api_map)) = self.describe().get("api".into()) {
394+
if let Value::Json(serde_json::Value::Object(api_map)) = <Self as Alp>::describe(self).get("api".into()) {
395395
for (api_name, node) in api_map { collect_routes(&node, &api_name, &mut dynamic_calls); }
396396
}
397397
for token in ["tickers", "ticker/24hr", "ticker", "bookticker"] {
398398
for (api_name, method_name, path_name) in &dynamic_calls {
399399
if method_name.as_str() != "GET" || path_name.contains('{') { continue; }
400400
let p = path_name.to_lowercase();
401401
if p == token || p.contains(token) {
402-
let rv = self.request(path_name.clone().into(), api_name.clone().into(), method_name.clone().into(), params.clone(), Value::Undefined, Value::Undefined, Value::Undefined).await;
402+
let rv = <Self as Alp>::request(self,path_name.clone().into(), api_name.clone().into(), method_name.clone().into(), params.clone(), Value::Undefined, Value::Undefined, Value::Undefined).await;
403403
if !rv.is_undefined() { return rv; }
404404
}
405405
}
406406
}
407407
let candidates = vec![("public", "GET", "ticker/24hr"), ("public", "GET", "tickers"), ("public", "GET", "ticker")];
408408
for (api_name, method_name, path_name) in candidates {
409-
let rv = self.request(path_name.into(), api_name.into(), method_name.into(), params.clone(), Value::Undefined, Value::Undefined, Value::Undefined).await;
409+
let rv = <Self as Alp>::request(self,path_name.into(), api_name.into(), method_name.into(), params.clone(), Value::Undefined, Value::Undefined, Value::Undefined).await;
410410
if !rv.is_undefined() { return rv; }
411411
}
412412
Value::Undefined
@@ -422,22 +422,22 @@ pub trait Alp : Exchange {
422422
let mut request = if params.is_object() { params.clone() } else { Value::new_object() };
423423
request.set("symbol".into(), symbol.clone());
424424
let mut dynamic_calls: Vec<(String, String, String)> = vec![];
425-
if let Value::Json(serde_json::Value::Object(api_map)) = self.describe().get("api".into()) {
425+
if let Value::Json(serde_json::Value::Object(api_map)) = <Self as Alp>::describe(self).get("api".into()) {
426426
for (api_name, node) in api_map { collect_routes(&node, &api_name, &mut dynamic_calls); }
427427
}
428428
for token in ["ticker/24hr", "ticker", "ticker/price", "bookticker", "tickers"] {
429429
for (api_name, method_name, path_name) in &dynamic_calls {
430430
if method_name.as_str() != "GET" || path_name.contains('{') { continue; }
431431
let p = path_name.to_lowercase();
432432
if p == token || p.contains(token) {
433-
let rv = self.request(path_name.clone().into(), api_name.clone().into(), method_name.clone().into(), request.clone(), Value::Undefined, Value::Undefined, Value::Undefined).await;
433+
let rv = <Self as Alp>::request(self,path_name.clone().into(), api_name.clone().into(), method_name.clone().into(), request.clone(), Value::Undefined, Value::Undefined, Value::Undefined).await;
434434
if !rv.is_undefined() { return rv; }
435435
}
436436
}
437437
}
438438
let candidates = vec![("public", "GET", "ticker/24hr"), ("public", "GET", "ticker"), ("public", "GET", "ticker/price")];
439439
for (api_name, method_name, path_name) in candidates {
440-
let rv = self.request(path_name.into(), api_name.into(), method_name.into(), request.clone(), Value::Undefined, Value::Undefined, Value::Undefined).await;
440+
let rv = <Self as Alp>::request(self,path_name.into(), api_name.into(), method_name.into(), request.clone(), Value::Undefined, Value::Undefined, Value::Undefined).await;
441441
if !rv.is_undefined() { return rv; }
442442
}
443443
Value::Undefined
@@ -497,22 +497,22 @@ pub trait Alp : Exchange {
497497
request.set("symbol".into(), symbol.clone());
498498
if limit.is_nonnullish() { request.set("limit".into(), limit.clone()); }
499499
let mut dynamic_calls: Vec<(String, String, String)> = vec![];
500-
if let Value::Json(serde_json::Value::Object(api_map)) = self.describe().get("api".into()) {
500+
if let Value::Json(serde_json::Value::Object(api_map)) = <Self as Alp>::describe(self).get("api".into()) {
501501
for (api_name, node) in api_map { collect_routes(&node, &api_name, &mut dynamic_calls); }
502502
}
503503
for token in ["depth", "orderbook", "order_book"] {
504504
for (api_name, method_name, path_name) in &dynamic_calls {
505505
if method_name.as_str() != "GET" || path_name.contains('{') { continue; }
506506
let p = path_name.to_lowercase();
507507
if p == token || p.contains(token) {
508-
let rv = self.request(path_name.clone().into(), api_name.clone().into(), method_name.clone().into(), request.clone(), Value::Undefined, Value::Undefined, Value::Undefined).await;
508+
let rv = <Self as Alp>::request(self,path_name.clone().into(), api_name.clone().into(), method_name.clone().into(), request.clone(), Value::Undefined, Value::Undefined, Value::Undefined).await;
509509
if !rv.is_undefined() { return rv; }
510510
}
511511
}
512512
}
513513
let candidates = vec![("public", "GET", "depth"), ("public", "GET", "orderbook"), ("public", "GET", "order_book")];
514514
for (api_name, method_name, path_name) in candidates {
515-
let rv = self.request(path_name.into(), api_name.into(), method_name.into(), request.clone(), Value::Undefined, Value::Undefined, Value::Undefined).await;
515+
let rv = <Self as Alp>::request(self,path_name.into(), api_name.into(), method_name.into(), request.clone(), Value::Undefined, Value::Undefined, Value::Undefined).await;
516516
if !rv.is_undefined() { return rv; }
517517
}
518518
Value::Undefined
@@ -578,7 +578,7 @@ pub trait Alp : Exchange {
578578
if limit.is_nonnullish() { request.set("limit".into(), limit.clone()); }
579579
let candidates = vec![("public", "GET", "trades"), ("public", "GET", "recent_trades"), ("public", "GET", "aggTrades")];
580580
for (api_name, method_name, path_name) in candidates {
581-
let rv = self.request(path_name.into(), api_name.into(), method_name.into(), request.clone(), Value::Undefined, Value::Undefined, Value::Undefined).await;
581+
let rv = <Self as Alp>::request(self,path_name.into(), api_name.into(), method_name.into(), request.clone(), Value::Undefined, Value::Undefined, Value::Undefined).await;
582582
if !rv.is_undefined() { return rv; }
583583
}
584584
Value::Undefined
@@ -672,7 +672,7 @@ pub trait Alp : Exchange {
672672
"amount": self.safe_number(transaction.clone(), Value::from("amount"), Value::Undefined),
673673
"txid": Value::Undefined,
674674
"type": Value::Undefined,
675-
"status": self.parse_transaction_status(status_id.clone()),
675+
"status": <Self as Alp>::parse_transaction_status(self, status_id.clone()),
676676
"comment": Value::Undefined,
677677
"internal": Value::Undefined,
678678
"fee": Value::Undefined,
@@ -719,22 +719,22 @@ pub trait Alp : Exchange {
719719
if since.is_nonnullish() { request.set("since".into(), since.clone()); request.set("startTime".into(), since.clone()); }
720720
if limit.is_nonnullish() { request.set("limit".into(), limit.clone()); }
721721
let mut dynamic_calls: Vec<(String, String, String)> = vec![];
722-
if let Value::Json(serde_json::Value::Object(api_map)) = self.describe().get("api".into()) {
722+
if let Value::Json(serde_json::Value::Object(api_map)) = <Self as Alp>::describe(self).get("api".into()) {
723723
for (api_name, node) in api_map { collect_routes(&node, &api_name, &mut dynamic_calls); }
724724
}
725725
for token in ["klines", "candles", "ohlcv"] {
726726
for (api_name, method_name, path_name) in &dynamic_calls {
727727
if method_name.as_str() != "GET" || path_name.contains('{') { continue; }
728728
let p = path_name.to_lowercase();
729729
if p == token || p.contains(token) {
730-
let rv = self.request(path_name.clone().into(), api_name.clone().into(), method_name.clone().into(), request.clone(), Value::Undefined, Value::Undefined, Value::Undefined).await;
730+
let rv = <Self as Alp>::request(self,path_name.clone().into(), api_name.clone().into(), method_name.clone().into(), request.clone(), Value::Undefined, Value::Undefined, Value::Undefined).await;
731731
if !rv.is_undefined() { return rv; }
732732
}
733733
}
734734
}
735735
let candidates = vec![("public", "GET", "klines"), ("public", "GET", "candles"), ("public", "GET", "ohlcv")];
736736
for (api_name, method_name, path_name) in candidates {
737-
let rv = self.request(path_name.into(), api_name.into(), method_name.into(), request.clone(), Value::Undefined, Value::Undefined, Value::Undefined).await;
737+
let rv = <Self as Alp>::request(self,path_name.into(), api_name.into(), method_name.into(), request.clone(), Value::Undefined, Value::Undefined, Value::Undefined).await;
738738
if !rv.is_undefined() { return rv; }
739739
}
740740
Value::Undefined
@@ -763,7 +763,7 @@ pub trait Alp : Exchange {
763763
params = params.or_default(Value::new_object());
764764
self.load_markets(Value::Undefined, Value::Undefined).await;
765765
let mut response: Value = self.dispatch("privateGetWallets".into(), params.clone(), Value::Undefined).await;
766-
return self.parse_balance(response.clone());
766+
return <Self as Alp>::parse_balance(self, response.clone());
767767
}
768768

769769
fn parse_order_status(&self, mut status: Value) -> Value {
@@ -818,7 +818,7 @@ pub trait Alp : Exchange {
818818
let mut remaining: Value = self.safe_string(order.clone(), Value::from("amount"));
819819
let mut filled: Value = self.safe_string(order.clone(), Value::from("amount_filled"));
820820
let mut amount: Value = self.safe_string(order.clone(), Value::from("amount_original"));
821-
let mut status: Value = self.parse_order_status(self.safe_string(order.clone(), Value::from("status")));
821+
let mut status: Value = <Self as Alp>::parse_order_status(self, self.safe_string(order.clone(), Value::from("status")));
822822
let mut id: Value = self.safe_string_n(order.clone(), Value::Json(serde_json::Value::Array(vec![Value::from("oid").into(), Value::from("id").into(), Value::from("order").into()])));
823823
let mut trades: Value = self.safe_value(order.clone(), Value::from("trades"));
824824
let mut side: Value = self.safe_string_2(order.clone(), Value::from("my_side"), Value::from("type"));
@@ -864,7 +864,7 @@ pub trait Alp : Exchange {
864864
if !response.get(Value::from("success")).is_truthy() {
865865
panic!(r###"InvalidOrder::new(self.get("id".into()) + Value::from(" ") + self.json(response.clone()))"###);
866866
};
867-
let mut order: Value = self.parse_order(response.clone(), market.clone());
867+
let mut order: Value = <Self as Alp>::parse_order(self, response.clone(), market.clone());
868868
let mut order_amount: Value = order.get(Value::from("amount")).to_string();
869869
amount = if Precise::string_gt(order_amount.clone(), Value::from("0")) { order.get(Value::from("amount")) } else { amount.clone() };
870870
order.set("amount".into(), self.parse_number(amount.clone(), Value::Undefined));
@@ -882,7 +882,7 @@ pub trait Alp : Exchange {
882882
// "order": 63568
883883
// }
884884
//
885-
return self.parse_order(response.clone(), Value::Undefined);
885+
return <Self as Alp>::parse_order(self, response.clone(), Value::Undefined);
886886
}
887887

888888
async fn fetch_order(&mut self, mut id: Value, mut symbol: Value, mut params: Value) -> Value {
@@ -892,7 +892,7 @@ pub trait Alp : Exchange {
892892
"id": id
893893
}))).unwrap());
894894
let mut order: Value = self.private_get_order_id(extend_2(request.clone(), params.clone())).await;
895-
return self.parse_order(order.clone(), Value::Undefined);
895+
return <Self as Alp>::parse_order(self, order.clone(), Value::Undefined);
896896
}
897897

898898
async fn fetch_orders(&mut self, mut symbol: Value, mut since: Value, mut limit: Value, mut params: Value) -> Value {
@@ -916,15 +916,15 @@ pub trait Alp : Exchange {
916916
let mut request: Value = Value::Json(normalize(&Value::Json(json!({
917917
"status": "1"
918918
}))).unwrap());
919-
return self.fetch_orders(symbol.clone(), since.clone(), limit.clone(), extend_2(request.clone(), params.clone())).await;
919+
return <Self as Alp>::fetch_orders(self, symbol.clone(), since.clone(), limit.clone(), extend_2(request.clone(), params.clone())).await;
920920
}
921921

922922
async fn fetch_closed_orders(&mut self, mut symbol: Value, mut since: Value, mut limit: Value, mut params: Value) -> Value {
923923
params = params.or_default(Value::new_object());
924924
let mut request: Value = Value::Json(normalize(&Value::Json(json!({
925925
"status": "3"
926926
}))).unwrap());
927-
return self.fetch_orders(symbol.clone(), since.clone(), limit.clone(), extend_2(request.clone(), params.clone())).await;
927+
return <Self as Alp>::fetch_orders(self, symbol.clone(), since.clone(), limit.clone(), extend_2(request.clone(), params.clone())).await;
928928
}
929929

930930
async fn fetch_my_trades(&mut self, mut symbol: Value, mut since: Value, mut limit: Value, mut params: Value) -> Value {
@@ -975,7 +975,7 @@ pub trait Alp : Exchange {
975975
};
976976
headers.set("X-KEY".into(), self.get("apiKey".into()));
977977
headers.set("X-SIGN".into(), self.hmac(self.encode(payload.clone()), self.encode(self.get("secret".into())), sha256.clone()));
978-
headers.set("X-NONCE".into(), self.nonce().to_string());
978+
headers.set("X-NONCE".into(), <Self as Alp>::nonce(self).to_string());
979979
};
980980
return Value::Json(normalize(&Value::Json(json!({
981981
"url": url,

0 commit comments

Comments
 (0)