stock-trek 0.6.1

Stock Trek time-series analysis
Documentation
use crate::{
    asset_id::AssetId,
    error::result::StockTrekResult,
    exchange_id::ExchangeId,
    execute::{capability::Capability, executor::Executor, increment_sizes::IncrementSizes},
    order::{order_request::OrderRequest, trading_pair::TradingPair},
};
use async_trait::async_trait;
use rust_decimal::Decimal;
use std::collections::HashMap;

pub type ExchangeAdapter = Box<dyn ExchangeAdapterTrait>;

#[async_trait]
pub trait ExchangeAdapterTrait {
    fn id(&self) -> ExchangeId;
    fn capabilities(&self) -> &Vec<Capability>;
    fn increments(&self) -> &HashMap<TradingPair, IncrementSizes>;
    fn asset_ticker(&self, asset_id: &AssetId) -> &str {
        asset_id.default_ticker()
    }
    fn symbol_ticker_divider(&self) -> Option<&str> {
        None
    }
    fn to_symbol(&self, base: &AssetId, quote: &AssetId) -> String {
        let base_ticker = self.asset_ticker(base);
        let quote_ticker = self.asset_ticker(quote);
        match self.symbol_ticker_divider() {
            None => format!("{}{}", base_ticker, quote_ticker),
            Some(divider) => format!("{}{}{}", base_ticker, divider, quote_ticker),
        }
    }
    fn is_valid(&self, order: &OrderRequest<AssetId, Decimal>) -> StockTrekResult<bool>;
    fn enqueue_order(
        &self,
        order: &OrderRequest<AssetId, Decimal>,
        executor: &Executor,
    ) -> StockTrekResult<()>;
}