stock-trek 0.5.3

Stock Trek time-series analysis
Documentation
use crate::{
    error::{
        result::{StockTrekError, StockTrekResult},
        value::ValueError,
    },
    order::order_request::OrderRequest,
    resolved_context::ResolvedContext,
    resolvers::resolver::{Resolver, ResolverTrait},
    values::value::{ExchangeValue, NumberValue, TokenValue},
};
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
pub struct PlaceOrderResolver {
    exchange_value: ExchangeValue,
    order_request: OrderRequest<TokenValue, NumberValue>,
}

impl PlaceOrderResolver {
    pub fn new(
        exchange_value: ExchangeValue,
        order_request: OrderRequest<TokenValue, NumberValue>,
    ) -> Resolver {
        Box::new(Self {
            exchange_value,
            order_request,
        })
    }
}

#[typetag::serde]
impl ResolverTrait for PlaceOrderResolver {
    fn resolve(&self, c: &ResolvedContext) -> StockTrekResult<()> {
        let exchange = self.exchange_value.exchange(c)?;
        if let Some(exchange) = c.exchanges.get(&exchange) {
            let order = exchange.place_order(&c.bot_id, &self.order_request)?;
            println!("order {:?}", order);
            Ok(())
        } else {
            Err(StockTrekError::Value(ValueError::NotFound {
                name: "Exchange".to_string(),
                key: exchange.0,
            }))
        }
    }
}