use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum OrderSide {
Buy,
Sell,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum OrderType {
Market,
Limit,
Stop,
StopLimit,
TrailingStop,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum TimeInForce {
Day,
Gtc,
Ioc,
Fok,
Opg,
Cls,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum AssetClass {
UsEquity,
UsOption,
Crypto,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum OrderClass {
Simple,
Bracket,
Oco,
Oto,
Mleg,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum PositionIntent {
BuyToOpen,
BuyToClose,
SellToOpen,
SellToClose,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum OrderStatus {
New,
PartiallyFilled,
Filled,
DoneForDay,
Canceled,
Expired,
Replaced,
PendingCancel,
PendingReplace,
Accepted,
PendingNew,
AcceptedForBidding,
Stopped,
Rejected,
Suspended,
Calculated,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum OrderQueryStatus {
Open,
Closed,
All,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum SortDirection {
Asc,
Desc,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct OrderRequest {
pub symbol: Option<String>,
pub asset_class: Option<AssetClass>,
pub qty: Option<String>,
pub notional: Option<String>,
pub side: Option<OrderSide>,
pub order_type: OrderType,
pub time_in_force: TimeInForce,
pub order_class: Option<OrderClass>,
pub limit_price: Option<String>,
pub stop_price: Option<String>,
pub trail_price: Option<String>,
pub trail_percent: Option<String>,
pub client_order_id: Option<String>,
pub extended_hours: Option<bool>,
pub position_intent: Option<PositionIntent>,
pub legs: Option<Vec<OrderLeg>>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct ReplaceOrderRequest {
pub qty: Option<String>,
pub time_in_force: Option<TimeInForce>,
pub limit_price: Option<String>,
pub stop_price: Option<String>,
pub trail: Option<String>,
pub client_order_id: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct ListOrdersRequest {
pub status: Option<OrderQueryStatus>,
pub limit: Option<u16>,
pub after: Option<String>,
pub until: Option<String>,
pub direction: Option<SortDirection>,
pub nested: Option<bool>,
pub side: Option<OrderSide>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct OrderLeg {
pub symbol: String,
pub ratio_qty: String,
pub side: OrderSide,
pub position_intent: Option<PositionIntent>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Order {
pub id: String,
pub client_order_id: Option<String>,
pub symbol: Option<String>,
pub asset_class: Option<AssetClass>,
pub qty: Option<String>,
pub notional: Option<String>,
pub filled_qty: Option<String>,
pub side: Option<OrderSide>,
pub order_type: OrderType,
pub time_in_force: TimeInForce,
pub status: OrderStatus,
pub order_class: Option<OrderClass>,
pub limit_price: Option<String>,
pub stop_price: Option<String>,
pub trail_price: Option<String>,
pub trail_percent: Option<String>,
pub created_at: Option<String>,
pub extended_hours: Option<bool>,
pub position_intent: Option<PositionIntent>,
pub ratio_qty: Option<String>,
pub legs: Option<Vec<OrderLeg>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct TradingAccount {
pub id: String,
pub account_number: Option<String>,
pub status: String,
pub currency: String,
pub buying_power: Option<String>,
pub equity: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OptionTradeSnapshot {
pub price: Option<f64>,
pub size: Option<u64>,
pub timestamp: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OptionQuoteSnapshot {
pub bid_price: Option<f64>,
pub bid_size: Option<u64>,
pub ask_price: Option<f64>,
pub ask_size: Option<u64>,
pub timestamp: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OptionGreeks {
pub delta: Option<f64>,
pub gamma: Option<f64>,
pub theta: Option<f64>,
pub vega: Option<f64>,
pub rho: Option<f64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OptionChainSnapshot {
pub symbol: String,
pub latest_trade: Option<OptionTradeSnapshot>,
pub latest_quote: Option<OptionQuoteSnapshot>,
pub implied_volatility: Option<f64>,
pub greeks: Option<OptionGreeks>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CanceledOrderResponse {
pub id: String,
pub status: u16,
pub body: Option<Value>,
}