#![allow(clippy::derive_partial_eq_without_eq)]
use chrono::{DateTime, Utc};
#[cfg(feature = "dataframe")]
use df_derive_macros::ToDataFrame;
use paft_domain::{Instrument, MarketState};
use paft_money::Price;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "dataframe", derive(ToDataFrame))]
pub struct GenericSnapshot<M = ()> {
#[cfg_attr(feature = "dataframe", df_derive(as_string))]
pub instrument: Instrument,
pub name: Option<String>,
#[cfg_attr(feature = "dataframe", df_derive(as_str))]
pub market_state: Option<MarketState>,
#[serde(default, with = "chrono::serde::ts_milliseconds_option")]
pub as_of: Option<DateTime<Utc>>,
pub last: Option<Price>,
pub previous_close: Option<Price>,
pub open: Option<Price>,
pub day_high: Option<Price>,
pub day_low: Option<Price>,
pub volume: Option<u64>,
#[serde(flatten, default = "Default::default")]
pub provider: M,
}
impl<M: Default> GenericSnapshot<M> {
#[must_use]
pub fn new(instrument: Instrument) -> Self {
Self {
instrument,
name: None,
market_state: None,
as_of: None,
last: None,
previous_close: None,
open: None,
day_high: None,
day_low: None,
volume: None,
provider: M::default(),
}
}
}
pub type Snapshot = GenericSnapshot<()>;