stock-trek 0.4.13

Stock Trek time-series analysis
Documentation
use crate::{
    error::result::StockTrekResult,
    exchanges::order_capability::OrderCapability,
    resolved_context::ResolvedContext,
    values::value::{ExchangeValue, FlagValue, FlagValueTrait},
};
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
pub struct ExchangeHasCapabilityValue {
    exchange: ExchangeValue,
    capability: OrderCapability,
}

impl ExchangeHasCapabilityValue {
    pub fn new(exchange: ExchangeValue, capability: OrderCapability) -> FlagValue {
        Box::new(Self {
            exchange,
            capability,
        })
    }
}

#[typetag::serde]
impl FlagValueTrait for ExchangeHasCapabilityValue {
    fn flag(&self, c: &ResolvedContext) -> StockTrekResult<bool> {
        let exchange = self.exchange.exchange(c)?;
        let has_capability = c
            .exchange_capabilities
            .has_capability(&exchange, &self.capability)
            .unwrap_or_default();
        Ok(has_capability)
    }
}