stock-trek 0.5.0

Stock Trek time-series analysis
Documentation
use crate::{
    error::result::StockTrekResult,
    resolved_context::ResolvedContext,
    values::value::{ExchangeValue, NumberValue, NumberValueTrait, TokenValue},
};
use serde::{Deserialize, Serialize};

#[derive(Clone, Serialize, Deserialize)]
pub struct TokenInExchangeValue {
    exchange_value: ExchangeValue,
    token_value: TokenValue,
}

impl TokenInExchangeValue {
    pub fn new(exchange_value: ExchangeValue, token_value: TokenValue) -> NumberValue {
        Box::new(Self {
            exchange_value,
            token_value,
        })
    }
}

#[typetag::serde]
impl NumberValueTrait for TokenInExchangeValue {
    fn clone_box(&self) -> NumberValue {
        Box::new(self.clone())
    }
    fn number(&self, c: &ResolvedContext) -> StockTrekResult<f64> {
        let exchange = self.exchange_value.exchange(c)?;
        let token = self.token_value.token(c)?;
        Ok(c.portfolio.token_in_exchange(&token, &exchange))
    }
}