Skip to main content

mkt_core/
traits.rs

1use async_trait::async_trait;
2use mkt_types::{
3    Balance, Fill, FuturesCancelOrderRequest, FuturesOrderQuery, FuturesOrderRequest, Kline,
4    KlineRequest, LastPrice, MarketInfo, Order, OrderBook, Position, SetLeverageRequest,
5    SpotCancelOrderRequest, SpotOrderQuery, SpotOrderRequest, Symbol, Trade,
6};
7
8use crate::{
9    Capabilities, EventStream, PrivateEventStream, PrivateSubscription, Result, Subscription,
10};
11use mkt_types::ExchangeId;
12
13pub trait ExchangeInfo: Send + Sync {
14    fn id(&self) -> ExchangeId;
15    fn capabilities(&self) -> Capabilities;
16}
17
18#[async_trait]
19pub trait MarketData: Send + Sync {
20    async fn markets(&self) -> Result<Vec<MarketInfo>>;
21    async fn last_price(&self, symbol: &Symbol) -> Result<LastPrice>;
22    async fn last_prices(&self, symbols: Option<&[Symbol]>) -> Result<Vec<LastPrice>>;
23    async fn order_book(&self, symbol: &Symbol, depth: Option<u16>) -> Result<OrderBook>;
24    async fn recent_trades(&self, symbol: &Symbol, limit: Option<u32>) -> Result<Vec<Trade>>;
25    async fn klines(&self, request: KlineRequest) -> Result<Vec<Kline>>;
26}
27
28#[async_trait]
29pub trait SpotTrading: Send + Sync {
30    async fn place_spot_order(&self, request: SpotOrderRequest) -> Result<Order>;
31    async fn cancel_spot_order(&self, request: SpotCancelOrderRequest) -> Result<Order>;
32    async fn spot_order(&self, query: SpotOrderQuery) -> Result<Order>;
33    async fn open_spot_orders(&self, symbol: Option<&Symbol>) -> Result<Vec<Order>>;
34    async fn spot_fills(&self, query: SpotOrderQuery) -> Result<Vec<Fill>>;
35}
36
37#[async_trait]
38pub trait FuturesTrading: Send + Sync {
39    async fn place_futures_order(&self, request: FuturesOrderRequest) -> Result<Order>;
40    async fn cancel_futures_order(&self, request: FuturesCancelOrderRequest) -> Result<Order>;
41    async fn futures_order(&self, query: FuturesOrderQuery) -> Result<Order>;
42    async fn open_futures_orders(&self, symbol: Option<&Symbol>) -> Result<Vec<Order>>;
43    async fn futures_fills(&self, query: FuturesOrderQuery) -> Result<Vec<Fill>>;
44    async fn positions(&self, symbol: Option<&Symbol>) -> Result<Vec<Position>>;
45    async fn set_leverage(&self, request: SetLeverageRequest) -> Result<()>;
46}
47
48#[async_trait]
49pub trait Account: Send + Sync {
50    async fn balances(&self) -> Result<Vec<Balance>>;
51}
52
53#[async_trait]
54pub trait PublicStream: Send + Sync {
55    async fn subscribe_public(
56        &self,
57        subscriptions: Vec<Subscription>,
58    ) -> Result<Box<dyn EventStream>>;
59}
60
61#[async_trait]
62pub trait PrivateStream: Send + Sync {
63    async fn subscribe_private(
64        &self,
65        subscriptions: Vec<PrivateSubscription>,
66    ) -> Result<Box<dyn PrivateEventStream>>;
67}