use crate::models::order_type::Type;
use crate::models::time_validity::TimeValidity;
use serde_with::serde_as;
use time::format_description::well_known::Rfc3339;
use time::OffsetDateTime;
#[serde_as]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct HistoricalOrder {
#[serde(rename = "dateCreated", skip_serializing_if = "Option::is_none")]
#[serde_as(as = "Option<Rfc3339>")]
pub date_created: Option<OffsetDateTime>,
#[serde(rename = "dateExecuted", skip_serializing_if = "Option::is_none")]
#[serde_as(as = "Option<Rfc3339>")]
pub date_executed: Option<OffsetDateTime>,
#[serde(rename = "dateModified", skip_serializing_if = "Option::is_none")]
#[serde_as(as = "Option<Rfc3339>")]
pub date_modified: Option<OffsetDateTime>,
#[serde(rename = "executor", skip_serializing_if = "Option::is_none")]
pub executor: Option<crate::models::executor::Executor>,
#[serde(rename = "fillCost", skip_serializing_if = "Option::is_none")]
pub fill_cost: Option<f32>,
#[serde(rename = "fillId", skip_serializing_if = "Option::is_none")]
pub fill_id: Option<i64>,
#[serde(rename = "fillPrice", skip_serializing_if = "Option::is_none")]
pub fill_price: Option<f32>,
#[serde(rename = "fillResult", skip_serializing_if = "Option::is_none")]
pub fill_result: Option<f32>,
#[serde(rename = "fillType", skip_serializing_if = "Option::is_none")]
pub fill_type: Option<FillType>,
#[serde(rename = "filledQuantity", skip_serializing_if = "Option::is_none")]
pub filled_quantity: Option<f32>,
#[serde(rename = "filledValue", skip_serializing_if = "Option::is_none")]
pub filled_value: Option<f32>,
#[serde(rename = "id")]
pub id: i64,
#[serde(rename = "limitPrice", skip_serializing_if = "Option::is_none")]
pub limit_price: Option<f32>,
#[serde(rename = "orderedQuantity", skip_serializing_if = "Option::is_none")]
pub ordered_quantity: Option<f32>,
#[serde(rename = "orderedValue", skip_serializing_if = "Option::is_none")]
pub ordered_value: Option<f32>,
#[serde(rename = "parentOrder", skip_serializing_if = "Option::is_none")]
pub parent_order: Option<i64>,
#[serde(rename = "status")]
pub status: Status,
#[serde(rename = "stopPrice", skip_serializing_if = "Option::is_none")]
pub stop_price: Option<f32>,
#[serde(rename = "taxes")]
pub taxes: Vec<crate::models::tax::Tax>,
#[serde(rename = "ticker", skip_serializing_if = "Option::is_none")]
pub ticker: Option<String>,
#[serde(rename = "timeValidity", skip_serializing_if = "Option::is_none")]
pub time_validity: Option<TimeValidity>,
#[serde(rename = "type")]
pub r#type: Type,
}
impl HistoricalOrder {
#[must_use]
pub const fn new() -> Self {
Self {
date_created: None,
date_executed: None,
date_modified: None,
executor: None,
fill_cost: None,
fill_id: None,
fill_price: None,
fill_result: None,
fill_type: None,
filled_quantity: None,
filled_value: None,
id: 0,
limit_price: None,
ordered_quantity: None,
ordered_value: None,
parent_order: None,
status: Status::Unknown,
stop_price: None,
taxes: Vec::new(),
ticker: None,
time_validity: None,
r#type: Type::Unknown,
}
}
}
impl Default for HistoricalOrder {
fn default() -> Self {
Self::new()
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum FillType {
#[serde(rename = "TOTV")]
Totv,
#[serde(rename = "OTC")]
Otc,
}
impl Default for FillType {
fn default() -> Self {
Self::Totv
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Status {
#[serde(rename = "LOCAL")]
Local,
#[serde(rename = "UNCONFIRMED")]
Unconfirmed,
#[serde(rename = "CONFIRMED")]
Confirmed,
#[serde(rename = "NEW")]
New,
#[serde(rename = "CANCELLING")]
Cancelling,
#[serde(rename = "CANCELLED")]
Cancelled,
#[serde(rename = "PARTIALLY_FILLED")]
PartiallyFilled,
#[serde(rename = "FILLED")]
Filled,
#[serde(rename = "REJECTED")]
Rejected,
#[serde(rename = "REPLACING")]
Replacing,
#[serde(rename = "REPLACED")]
Replaced,
#[serde(other)]
Unknown,
}
impl Default for Status {
fn default() -> Self {
Self::Local
}
}