stock-trek 0.4.1

Stock Trek time-series analysis
Documentation
use crate::values::{
    asset_in_exchange_value::AssetInExchangeValue,
    asset_total_value::AssetTotalValue,
    binary_calculation_value::{BinaryCalculationValue, BinaryOperator},
    literal_value::{
        LiteralAssetValue, LiteralExchangeValue, LiteralFlagValue, LiteralNumberValue,
    },
    scratch_pad_value::{
        ScratchPadAssetValue, ScratchPadExchangeValue, ScratchPadFlagValue, ScratchPadNumberValue,
    },
    unary_calculation_value::{UnaryCalculationValue, UnaryOperator},
    value::{AssetValue, ExchangeValue, FlagValue, NumberValue},
};
use digdigdig3::ExchangeId;

pub struct PortfolioValuesFactory {}
pub struct CalculationValuesFactory {}
pub struct LiteralValuesFactory {}
pub struct ScratchPadValuesFactory {}

impl PortfolioValuesFactory {
    pub fn asset_in_exchange(&self, exchange: ExchangeValue, asset: AssetValue) -> NumberValue {
        AssetInExchangeValue::new(exchange, asset)
    }
    pub fn asset_total(&self, asset: AssetValue) -> NumberValue {
        AssetTotalValue::new(asset)
    }
}

impl CalculationValuesFactory {
    pub fn binary(
        &self,
        left: NumberValue,
        operator: BinaryOperator,
        right: NumberValue,
    ) -> NumberValue {
        BinaryCalculationValue::new(left, operator, right)
    }
    pub fn unary(&self, number: NumberValue, operator: UnaryOperator) -> NumberValue {
        UnaryCalculationValue::new(number, operator)
    }
}

impl LiteralValuesFactory {
    pub fn asset(&self, literal: impl AsRef<str>) -> AssetValue {
        LiteralAssetValue::new(literal.as_ref().to_string())
    }
    pub fn exchange(&self, literal: ExchangeId) -> ExchangeValue {
        LiteralExchangeValue::new(literal)
    }
    pub fn flag(&self, literal: bool) -> FlagValue {
        LiteralFlagValue::new(literal)
    }
    pub fn number(&self, literal: f64) -> NumberValue {
        LiteralNumberValue::new(literal)
    }
}

impl ScratchPadValuesFactory {
    pub fn asset(&self, key: impl AsRef<str>) -> AssetValue {
        ScratchPadAssetValue::new(key.as_ref().to_string())
    }
    pub fn exchange(&self, key: impl AsRef<str>) -> ExchangeValue {
        ScratchPadExchangeValue::new(key.as_ref().to_string())
    }
    pub fn flag(&self, key: impl AsRef<str>) -> FlagValue {
        ScratchPadFlagValue::new(key.as_ref().to_string())
    }
    pub fn number(&self, key: impl AsRef<str>) -> NumberValue {
        ScratchPadNumberValue::new(key.as_ref().to_string())
    }
}