stock-trek 0.5.0

Stock Trek time-series analysis
Documentation
use crate::{
    order::{
        order_intent::OrderIntent, order_pricing::OrderPricing, order_quantity::OrderQuantity,
        order_request::OrderRequest, order_side::OrderSide, order_time_in_force::OrderTimeInForce,
        order_timing::OrderTiming, order_trigger_direction::OrderTriggerDirection,
        single_order::SingleOrder,
    },
    values::value::{NumberValue, TokenValue},
};

pub struct OrderFactory;

impl OrderFactory {
    pub fn market(
        &self,
        base: TokenValue,
        quote: TokenValue,
        intent: OrderIntent,
        side: OrderSide,
        quantity: OrderQuantity<NumberValue>,
    ) -> OrderRequest<TokenValue, NumberValue> {
        OrderRequest::Single(SingleOrder {
            base,
            quote,
            timing: OrderTiming::Immediate,
            pricing: OrderPricing::Market,
            intent,
            side,
            quantity,
        })
    }
    pub fn limit(
        &self,
        base: TokenValue,
        quote: TokenValue,
        intent: OrderIntent,
        side: OrderSide,
        time_in_force: OrderTimeInForce,
        price: NumberValue,
        quantity: OrderQuantity<NumberValue>,
    ) -> OrderRequest<TokenValue, NumberValue> {
        OrderRequest::Single(SingleOrder {
            base,
            quote,
            timing: OrderTiming::Immediate,
            pricing: OrderPricing::Limit {
                price,
                time_in_force,
            },
            intent,
            side,
            quantity,
        })
    }
    pub fn stop_market(
        &self,
        base: TokenValue,
        quote: TokenValue,
        intent: OrderIntent,
        side: OrderSide,
        stop_price: NumberValue,
        quantity: OrderQuantity<NumberValue>,
    ) -> OrderRequest<TokenValue, NumberValue> {
        OrderRequest::Single(SingleOrder {
            base,
            quote,
            timing: OrderTiming::Conditional {
                stop_price,
                trigger: OrderTriggerDirection::Below,
            },
            pricing: OrderPricing::Market,
            intent,
            side,
            quantity,
        })
    }
    pub fn stop_limit(
        &self,
        base: TokenValue,
        quote: TokenValue,
        intent: OrderIntent,
        side: OrderSide,
        time_in_force: OrderTimeInForce,
        stop_price: NumberValue,
        limit_price: NumberValue,
        quantity: OrderQuantity<NumberValue>,
    ) -> OrderRequest<TokenValue, NumberValue> {
        OrderRequest::Single(SingleOrder {
            base,
            quote,
            timing: OrderTiming::Conditional {
                stop_price,
                trigger: OrderTriggerDirection::Below,
            },
            pricing: OrderPricing::Limit {
                price: limit_price,
                time_in_force,
            },
            intent,
            side,
            quantity,
        })
    }
}