use derive_getters::Getters;
use rust_decimal::Decimal;
use crate::{
generics::order::Crypto,
provider::{
DataBasics,
data::{Data, DataSpecifier},
},
};
#[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
}
}