stock-trek 0.4.4

Stock Trek time-series analysis
Documentation
use crate::{
    actions::action::{Action, ActionTrait},
    error::result::StockTrekResult,
    exchanges::{client_order_id_builder::ClientOrderIdBuilder, exchange::Exchange},
};
use digdigdig3::{core::OrderRequest, ExchangeId};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;

#[derive(Clone, Serialize, Deserialize)]
pub struct OrderRequestAction {
    exchange: ExchangeId,
    order_request: OrderRequest,
}

impl OrderRequestAction {
    pub fn new(exchange: ExchangeId, order_request: OrderRequest) -> Action {
        Box::new(Self {
            exchange,
            order_request,
        })
    }
}

#[typetag::serde]
impl ActionTrait for OrderRequestAction {
    fn clone_box(&self) -> Box<dyn ActionTrait> {
        Box::new(self.clone())
    }
    fn complete(&mut self, exchanges: &HashMap<ExchangeId, Exchange>) -> StockTrekResult<()> {
        self.order_request.client_order_id = ClientOrderIdBuilder::from(&self.order_request);
        self.try_place_order(exchanges, &self.exchange, &self.order_request)
    }
}