use super::identifiers::{AccountId, BrokerOrderId, ContractId};
use super::money::{CurrencyCode, Money, Quantity};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use time::OffsetDateTime;
#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum OrderSide {
Buy,
Sell,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ReadOnlyOrderStatus {
Open,
Filled,
Cancelled,
Unknown,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct ReadOnlyOrderRecord {
pub account_id: AccountId,
pub broker_order_id: BrokerOrderId,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "cOID",
alias = "clientOrderId"
)]
pub client_order_id: Option<String>,
pub status: ReadOnlyOrderStatus,
pub side: Option<OrderSide>,
pub quantity: Option<Quantity>,
pub filled_quantity: Option<Quantity>,
pub contract_id: Option<ContractId>,
pub limit_price: Option<Money>,
pub currency: Option<CurrencyCode>,
#[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, Copy, Debug, Eq, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ForbiddenWriteAction {
Preview,
Approve,
Submit,
Cancel,
Modify,
}