cefi_rs/
interface_http.rs

1use 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}