rust #10

Merged
peperunas merged 127 commits from rust into master 2021-02-18 09:42:16 +00:00
Showing only changes of commit ef618ad754 - Show all commits

View File

@ -28,14 +28,7 @@ pub enum Exchange {
#[derive(Eq, PartialEq, Hash, Clone, Debug)]
pub enum ExchangeDetails {
Bitfinex {
prices_api_key: String,
prices_api_secret: String,
orders_api_key: String,
orders_api_secret: String,
positions_api_key: String,
positions_api_secret: String,
},
Bitfinex { api_key: String, api_secret: String },
}
/// You do **not** have to wrap the `Client` in an [`Rc`] or [`Arc`] to **reuse** it,
@ -43,32 +36,18 @@ pub enum ExchangeDetails {
#[derive(Clone, Debug)]
pub struct Client {
exchange: Exchange,
prices_connector: Arc<Box<dyn Connector>>,
orders_connector: Arc<Box<dyn Connector>>,
positions_connector: Arc<Box<dyn Connector>>,
inner: Arc<Box<dyn Connector>>,
}
impl Client {
pub fn new(exchange: &ExchangeDetails) -> Self {
match exchange {
ExchangeDetails::Bitfinex {
prices_api_key,
prices_api_secret,
orders_api_key,
orders_api_secret,
positions_api_key,
positions_api_secret,
api_key,
api_secret,
} => Self {
exchange: Exchange::Bitfinex,
prices_connector: Arc::new(Box::new(
(BitfinexConnector::new(prices_api_key, prices_api_secret)),
)),
orders_connector: Arc::new(Box::new(
(BitfinexConnector::new(orders_api_key, orders_api_secret)),
)),
positions_connector: Arc::new(Box::new(
(BitfinexConnector::new(positions_api_key, positions_api_secret)),
)),
inner: Arc::new(Box::new((BitfinexConnector::new(api_key, api_secret)))),
},
}
}
@ -79,8 +58,8 @@ impl Client {
) -> Result<Option<Vec<Position>>, BoxError> {
// retrieving open positions and order book to calculate effective profit/loss
let (positions, order_book) = tokio::join!(
self.positions_connector.active_positions(pair),
self.orders_connector.order_book(pair)
self.inner.active_positions(pair),
self.inner.order_book(pair)
);
let (mut positions, order_book) = (positions?, order_book?);
@ -100,23 +79,23 @@ impl Client {
}
pub async fn current_prices(&self, pair: &SymbolPair) -> Result<TradingPairTicker, BoxError> {
self.prices_connector.current_prices(pair).await
self.inner.current_prices(pair).await
}
pub async fn active_orders(&self, pair: &SymbolPair) -> Result<Vec<ActiveOrder>, BoxError> {
self.orders_connector.active_orders(pair).await
self.inner.active_orders(pair).await
}
pub async fn submit_order(&self, order: &OrderForm) -> Result<ActiveOrder, BoxError> {
self.orders_connector.submit_order(order).await
self.inner.submit_order(order).await
}
pub async fn order_book(&self, pair: &SymbolPair) -> Result<OrderBook, BoxError> {
self.orders_connector.order_book(pair).await
self.inner.order_book(pair).await
}
pub async fn cancel_order(&self, order: &ActiveOrder) -> Result<ActiveOrder, BoxError> {
self.orders_connector.cancel_order(order).await
self.inner.cancel_order(order).await
}
}