scuriolus 0.3.0

Scuriolus is a modular trading bot platform.
Documentation
use derive_getters::Getters;
use rust_decimal::Decimal;

use crate::{
    generics::order::Crypto,
    provider::{
        DataBasics,
        data::{Data, DataSpecifier},
    },
};

/// [`Kline`] or `kandle` represents evolutions of a value for the period of time it's defined on.
#[derive(Debug, serde::Serialize, serde::Deserialize, Clone, PartialEq, Eq)]
pub struct BaseKline {
    pub open: Decimal,
    pub high: Decimal,
    pub low: Decimal,
    pub close: Decimal,
    pub volume: Decimal,
    pub quote_asset_volume: Decimal,
}

#[derive(Debug, Clone, PartialEq, Eq, Hash, Getters)]
pub struct KlineSpecifier {
    asset: Crypto,
    quote: Crypto,
}

impl KlineSpecifier {
    pub fn new(asset: Crypto, quote: Crypto) -> Self {
        Self { asset, quote }
    }
}

impl DataSpecifier for KlineSpecifier {
    fn name(&self) -> String {
        format!("kline-{}{}", self.asset, self.quote)
    }
}

#[derive(Debug, serde::Serialize, serde::Deserialize, Clone, PartialEq, Eq)]
pub struct Kline {
    #[serde(flatten)]
    pub content: Option<BaseKline>,
    pub basics: DataBasics,
}

impl Data for Kline {
    type Specifier = KlineSpecifier;

    fn basics(&self) -> &DataBasics {
        &self.basics
    }

    fn mut_basics(&mut self) -> &mut DataBasics {
        &mut self.basics
    }
}