stock-trek 0.8.7

Stock Trek time-series analysis
Documentation
use crate::{
    actions::{
        action::{Action, ActionTrait},
        resolved_action::ResolvedAction,
    },
    cex::{
        capability::{CexCapability, HasRequiredCapabilities},
        order_request::OrderRequest,
    },
    error::result::StockTrekResult,
    resolveable::Resolvable,
    resolved_context::ResolvedContext,
    values::value::{AssetIdValue, CexIdValue, NumberValue},
};
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
pub struct SendOrderRequestAction {
    cex_id_value: CexIdValue,
    order_request: OrderRequest<AssetIdValue, NumberValue>,
}

impl SendOrderRequestAction {
    pub fn new(
        cex_id_value: CexIdValue,
        order_request: OrderRequest<AssetIdValue, NumberValue>,
    ) -> Action {
        Box::new(Self {
            cex_id_value,
            order_request,
        })
    }
}

#[typetag::serde]
impl ActionTrait for SendOrderRequestAction {}

impl Resolvable<ResolvedAction> for SendOrderRequestAction {
    fn try_resolve(&self, c: &ResolvedContext) -> StockTrekResult<ResolvedAction> {
        let cex_id = self.cex_id_value.cex_id(c)?;
        let order_request = self.order_request.try_resolve(c)?;
        Ok(ResolvedAction::PlaceOrder {
            cex_id,
            order_request,
        })
    }
}

impl HasRequiredCapabilities for SendOrderRequestAction {
    fn required_capabilities(&self) -> Vec<CexCapability> {
        self.order_request.required_capabilities()
    }
}