dex-connector 0.0.2

connections to dexes
Documentation
use crate::{
    dex_request::DexError, BalanceResponse, CreateOrderResponse, DefaultResponse,
    FilledOrdersResponse, OrderSide, TickerResponse,
};
use async_trait::async_trait;

pub struct TradeResult {
    pub is_filled: bool,
    pub filled_size: Option<f64>,
    pub filled_value: Option<f64>,
    pub filled_fee: Option<f64>,
}

pub struct MarketInfo {
    pub last_trade_price: Option<f64>,
    pub min_order: Option<f64>,
    pub min_tick: Option<f64>,
}

#[async_trait]
pub trait DexConnector: Send + Sync {
    async fn start(&self) -> Result<DefaultResponse, DexError>;

    async fn set_leverage(&self, symbol: &str, leverage: &str)
        -> Result<DefaultResponse, DexError>;

    async fn get_ticker(&self, symbol: &str) -> Result<TickerResponse, DexError>;

    async fn get_filled_orders(&self, symbol: &str) -> Result<FilledOrdersResponse, DexError>;

    async fn get_balance(&self) -> Result<BalanceResponse, DexError>;

    async fn clear_filled_order(
        &self,
        symbol: &str,
        order_id: &str,
    ) -> Result<DefaultResponse, DexError>;

    async fn create_order(
        &self,
        symbol: &str,
        size: &str,
        side: OrderSide,
        price: Option<String>,
    ) -> Result<CreateOrderResponse, DexError>;

    async fn cancel_order(&self, symbol: &str, order_id: &str)
        -> Result<DefaultResponse, DexError>;

    async fn close_all_positions(
        &self,
        symbol: Option<String>,
    ) -> Result<DefaultResponse, DexError>;

    fn round_price(&self, price: f64, min_tick: f64) -> f64 {
        (price / min_tick).round() * min_tick
    }

    fn round_size(&self, size: f64, min_order: f64) -> f64 {
        (size / min_order).round() * min_order
    }
}