use super::identifiers::{AccountId, BrokerOrderId, ContractId};
use super::money::{Money, Quantity};
use super::order::{OrderSide, ReadOnlyOrderStatus};
use super::order_preview::{PreviewOrderType, TimeInForce};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use time::OffsetDateTime;
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct OrdersHistoryRequest {
pub account_id: AccountId,
#[serde(with = "time::serde::rfc3339::option")]
#[schemars(with = "Option<String>")]
pub from: Option<OffsetDateTime>,
#[serde(with = "time::serde::rfc3339::option")]
#[schemars(with = "Option<String>")]
pub to: Option<OffsetDateTime>,
pub status: Option<ReadOnlyOrderStatus>,
pub limit: u32,
}
impl OrdersHistoryRequest {
pub const MIN_LIMIT: u32 = 1;
pub const MAX_LIMIT: u32 = 500;
#[must_use]
pub const fn bounded_limit(&self) -> u32 {
if self.limit < Self::MIN_LIMIT {
Self::MIN_LIMIT
} else if self.limit > Self::MAX_LIMIT {
Self::MAX_LIMIT
} else {
self.limit
}
}
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct HistoricalOrderRecord {
pub account_id: AccountId,
pub broker_order_id: BrokerOrderId,
pub contract_id: Option<ContractId>,
pub symbol: Option<String>,
pub side: Option<OrderSide>,
pub quantity: Option<Quantity>,
pub filled_quantity: Option<Quantity>,
pub order_type: Option<PreviewOrderType>,
pub limit_price: Option<Money>,
pub stop_price: Option<Money>,
pub time_in_force: Option<TimeInForce>,
pub status: ReadOnlyOrderStatus,
pub average_fill_price: Option<Money>,
pub cancel_reason: Option<String>,
#[serde(with = "time::serde::rfc3339::option")]
#[schemars(with = "Option<String>")]
pub created_at: Option<OffsetDateTime>,
#[serde(with = "time::serde::rfc3339::option")]
#[schemars(with = "Option<String>")]
pub updated_at: Option<OffsetDateTime>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct OrdersHistory {
pub account_id: AccountId,
pub orders: Vec<HistoricalOrderRecord>,
pub truncated: bool,
}