cefi_rs/
interface_http.rs1use async_trait::async_trait;
2
3use crate::{trade::*, types::Orderbook};
4
5#[async_trait]
6pub trait InterfaceHttp {
7 async fn get_server_time(&self) -> anyhow::Result<u64>;
8
9 async fn get_orderbook(&self, symbol: &String, limit: Option<i32>)
10 -> anyhow::Result<Orderbook>;
11
12 async fn place_order(&self, params: &PlaceOrderParams) -> anyhow::Result<PlaceOrderResponse>;
13
14 async fn cancel_order(&self, order_id: &String) -> anyhow::Result<CancelOrderResponse>;
15
16 async fn cancel_all_orders(&self, symbol: &String) -> anyhow::Result<CancelAllOrdersResponse>;
17
18 async fn amend_order(
19 &self,
20 order_id: &String,
21 params: &AmendOrderParams,
22 ) -> anyhow::Result<AmendOrderResponse>;
23}
24
25#[cfg(test)]
26mod tests {
27 use crate::exchanges::{binance::BinanceHttpWrapper, bybit::BybitHttpWrapper};
28
29 use super::*;
30
31 #[tokio::test]
32 async fn test_get_server_time() {
33 let mut exchanges: Vec<Box<dyn InterfaceHttp>> = vec![];
34
35 let bybit = BybitHttpWrapper::new("".to_string(), "".to_string());
36 exchanges.push(Box::new(bybit));
37
38 let binance = BinanceHttpWrapper::new("".to_string(), "".to_string());
39 exchanges.push(Box::new(binance));
40
41 for exchange in exchanges {
42 let server_time = exchange.get_server_time().await.unwrap();
43 println!("server_time: {:?}", server_time);
44 }
45 }
46}