stock-trek 0.5.4

Stock Trek time-series analysis
Documentation
use crate::{
    error::result::StockTrekResult,
    order::single_order::SingleOrder,
    resolved_context::ResolvedContext,
    resolvers::resolveable::Resolvable,
    scratch::key::TokenName,
    values::value::{NumberValue, TokenValue},
};
use serde::{Deserialize, Serialize};
use std::hash::Hash;

#[derive(Debug, Clone, Hash, Serialize, Deserialize)]
pub enum OrderRequest<T, N> {
    Single(SingleOrder<T, N>),
    OneCancelsTheOther {
        a: Box<OrderRequest<T, N>>,
        b: Box<OrderRequest<T, N>>,
    },
    OneTriggersTheOther {
        primary: Box<OrderRequest<T, N>>,
        secondary: Box<OrderRequest<T, N>>,
    },
}

impl Resolvable<OrderRequest<TokenName, f64>> for OrderRequest<TokenValue, NumberValue> {
    fn try_resolve(
        &self,
        context: &ResolvedContext,
    ) -> StockTrekResult<OrderRequest<TokenName, f64>> {
        match self {
            Self::Single(order) => Ok(OrderRequest::Single(order.try_resolve(context)?)),
            Self::OneCancelsTheOther { a, b } => Ok(OrderRequest::OneCancelsTheOther {
                a: Box::new(a.try_resolve(context)?),
                b: Box::new(b.try_resolve(context)?),
            }),
            Self::OneTriggersTheOther { primary, secondary } => {
                Ok(OrderRequest::OneTriggersTheOther {
                    primary: Box::new(primary.try_resolve(context)?),
                    secondary: Box::new(secondary.try_resolve(context)?),
                })
            }
        }
    }
}