#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::ids::*;
#[allow(unused_imports)]
use crate::timestamp::Timestamp;
#[allow(unused_imports)]
use rust_decimal::Decimal;
#[allow(unused_imports)]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Account {
#[serde(rename = "id", default, skip_serializing_if = "Option::is_none")]
pub id: Option<AccountID>,
#[serde(rename = "alias", default, skip_serializing_if = "Option::is_none")]
pub alias: Option<String>,
#[serde(rename = "currency", default, skip_serializing_if = "Option::is_none")]
pub currency: Option<Currency>,
#[serde(
rename = "createdByUserID",
default,
skip_serializing_if = "Option::is_none"
)]
pub created_by_user_id: Option<i64>,
#[serde(
rename = "createdTime",
default,
skip_serializing_if = "Option::is_none"
)]
pub created_time: Option<Timestamp>,
#[serde(
rename = "guaranteedStopLossOrderParameters",
default,
skip_serializing_if = "Option::is_none"
)]
pub guaranteed_stop_loss_order_parameters: Option<GuaranteedStopLossOrderParameters>,
#[serde(
rename = "guaranteedStopLossOrderMode",
default,
skip_serializing_if = "Option::is_none"
)]
pub guaranteed_stop_loss_order_mode: Option<GuaranteedStopLossOrderMode>,
#[serde(
rename = "guaranteedStopLossOrderMutability",
default,
skip_serializing_if = "Option::is_none"
)]
pub guaranteed_stop_loss_order_mutability: Option<GuaranteedStopLossOrderMutability>,
#[serde(
rename = "resettablePLTime",
default,
skip_serializing_if = "Option::is_none"
)]
pub resettable_pl_time: Option<Timestamp>,
#[serde(
rename = "marginRate",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_rate: Option<Decimal>,
#[serde(
rename = "openTradeCount",
default,
skip_serializing_if = "Option::is_none"
)]
pub open_trade_count: Option<i64>,
#[serde(
rename = "openPositionCount",
default,
skip_serializing_if = "Option::is_none"
)]
pub open_position_count: Option<i64>,
#[serde(
rename = "pendingOrderCount",
default,
skip_serializing_if = "Option::is_none"
)]
pub pending_order_count: Option<i64>,
#[serde(
rename = "hedgingEnabled",
default,
skip_serializing_if = "Option::is_none"
)]
pub hedging_enabled: Option<bool>,
#[serde(
rename = "unrealizedPL",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub unrealized_pl: Option<Decimal>,
#[serde(rename = "NAV", default, skip_serializing_if = "Option::is_none")]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub nav: Option<Decimal>,
#[serde(
rename = "marginUsed",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_used: Option<Decimal>,
#[serde(
rename = "marginAvailable",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_available: Option<Decimal>,
#[serde(
rename = "positionValue",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub position_value: Option<Decimal>,
#[serde(
rename = "marginCloseoutUnrealizedPL",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_unrealized_pl: Option<Decimal>,
#[serde(
rename = "marginCloseoutNAV",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_nav: Option<Decimal>,
#[serde(
rename = "marginCloseoutMarginUsed",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_margin_used: Option<Decimal>,
#[serde(
rename = "marginCloseoutPercent",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_percent: Option<Decimal>,
#[serde(
rename = "marginCloseoutPositionValue",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_position_value: Option<Decimal>,
#[serde(
rename = "withdrawalLimit",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub withdrawal_limit: Option<Decimal>,
#[serde(
rename = "marginCallMarginUsed",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_call_margin_used: Option<Decimal>,
#[serde(
rename = "marginCallPercent",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_call_percent: Option<Decimal>,
#[serde(rename = "balance", default, skip_serializing_if = "Option::is_none")]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub balance: Option<Decimal>,
#[serde(rename = "pl", default, skip_serializing_if = "Option::is_none")]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub pl: Option<Decimal>,
#[serde(
rename = "resettablePL",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub resettable_pl: Option<Decimal>,
#[serde(rename = "financing", default, skip_serializing_if = "Option::is_none")]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub financing: Option<Decimal>,
#[serde(
rename = "commission",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub commission: Option<Decimal>,
#[serde(
rename = "dividendAdjustment",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub dividend_adjustment: Option<Decimal>,
#[serde(
rename = "guaranteedExecutionFees",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub guaranteed_execution_fees: Option<Decimal>,
#[serde(
rename = "marginCallEnterTime",
default,
skip_serializing_if = "Option::is_none"
)]
pub margin_call_enter_time: Option<Timestamp>,
#[serde(
rename = "marginCallExtensionCount",
default,
skip_serializing_if = "Option::is_none"
)]
pub margin_call_extension_count: Option<i64>,
#[serde(
rename = "lastMarginCallExtensionTime",
default,
skip_serializing_if = "Option::is_none"
)]
pub last_margin_call_extension_time: Option<Timestamp>,
#[serde(
rename = "lastTransactionID",
default,
skip_serializing_if = "Option::is_none"
)]
pub last_transaction_id: Option<TransactionID>,
#[serde(rename = "trades", default, skip_serializing_if = "Option::is_none")]
pub trades: Option<Vec<TradeSummary>>,
#[serde(rename = "positions", default, skip_serializing_if = "Option::is_none")]
pub positions: Option<Vec<Position>>,
#[serde(rename = "orders", default, skip_serializing_if = "Option::is_none")]
pub orders: Option<Vec<Order>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AccountChangesState {
#[serde(
rename = "unrealizedPL",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub unrealized_pl: Option<Decimal>,
#[serde(rename = "NAV", default, skip_serializing_if = "Option::is_none")]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub nav: Option<Decimal>,
#[serde(
rename = "marginUsed",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_used: Option<Decimal>,
#[serde(
rename = "marginAvailable",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_available: Option<Decimal>,
#[serde(
rename = "positionValue",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub position_value: Option<Decimal>,
#[serde(
rename = "marginCloseoutUnrealizedPL",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_unrealized_pl: Option<Decimal>,
#[serde(
rename = "marginCloseoutNAV",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_nav: Option<Decimal>,
#[serde(
rename = "marginCloseoutMarginUsed",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_margin_used: Option<Decimal>,
#[serde(
rename = "marginCloseoutPercent",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_percent: Option<Decimal>,
#[serde(
rename = "marginCloseoutPositionValue",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_position_value: Option<Decimal>,
#[serde(
rename = "withdrawalLimit",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub withdrawal_limit: Option<Decimal>,
#[serde(
rename = "marginCallMarginUsed",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_call_margin_used: Option<Decimal>,
#[serde(
rename = "marginCallPercent",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_call_percent: Option<Decimal>,
#[serde(rename = "balance", default, skip_serializing_if = "Option::is_none")]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub balance: Option<Decimal>,
#[serde(rename = "pl", default, skip_serializing_if = "Option::is_none")]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub pl: Option<Decimal>,
#[serde(
rename = "resettablePL",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub resettable_pl: Option<Decimal>,
#[serde(rename = "financing", default, skip_serializing_if = "Option::is_none")]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub financing: Option<Decimal>,
#[serde(
rename = "commission",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub commission: Option<Decimal>,
#[serde(
rename = "dividendAdjustment",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub dividend_adjustment: Option<Decimal>,
#[serde(
rename = "guaranteedExecutionFees",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub guaranteed_execution_fees: Option<Decimal>,
#[serde(
rename = "marginCallEnterTime",
default,
skip_serializing_if = "Option::is_none"
)]
pub margin_call_enter_time: Option<Timestamp>,
#[serde(
rename = "marginCallExtensionCount",
default,
skip_serializing_if = "Option::is_none"
)]
pub margin_call_extension_count: Option<i64>,
#[serde(
rename = "lastMarginCallExtensionTime",
default,
skip_serializing_if = "Option::is_none"
)]
pub last_margin_call_extension_time: Option<Timestamp>,
#[serde(rename = "orders", default, skip_serializing_if = "Option::is_none")]
pub orders: Option<Vec<DynamicOrderState>>,
#[serde(rename = "trades", default, skip_serializing_if = "Option::is_none")]
pub trades: Option<Vec<CalculatedTradeState>>,
#[serde(rename = "positions", default, skip_serializing_if = "Option::is_none")]
pub positions: Option<Vec<CalculatedPositionState>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AccountProperties {
#[serde(rename = "id", default, skip_serializing_if = "Option::is_none")]
pub id: Option<AccountID>,
#[serde(
rename = "mt4AccountID",
default,
skip_serializing_if = "Option::is_none"
)]
pub mt4_account_id: Option<i64>,
#[serde(rename = "tags", default, skip_serializing_if = "Option::is_none")]
pub tags: Option<Vec<String>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GuaranteedStopLossOrderParameters {
#[serde(
rename = "mutabilityMarketOpen",
default,
skip_serializing_if = "Option::is_none"
)]
pub mutability_market_open: Option<GuaranteedStopLossOrderMutability>,
#[serde(
rename = "mutabilityMarketHalted",
default,
skip_serializing_if = "Option::is_none"
)]
pub mutability_market_halted: Option<GuaranteedStopLossOrderMutability>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum GuaranteedStopLossOrderMode {
Disabled,
Allowed,
Required,
Unknown(String),
}
impl GuaranteedStopLossOrderMode {
pub fn as_str(&self) -> &str {
match self {
Self::Disabled => "DISABLED",
Self::Allowed => "ALLOWED",
Self::Required => "REQUIRED",
Self::Unknown(value) => value,
}
}
}
impl Serialize for GuaranteedStopLossOrderMode {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
serializer.serialize_str(self.as_str())
}
}
impl<'de> Deserialize<'de> for GuaranteedStopLossOrderMode {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let value = String::deserialize(deserializer)?;
Ok(match value.as_str() {
"DISABLED" => Self::Disabled,
"ALLOWED" => Self::Allowed,
"REQUIRED" => Self::Required,
_ => Self::Unknown(value),
})
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum GuaranteedStopLossOrderMutability {
Fixed,
Replaceable,
Cancelable,
PriceWidenOnly,
Unknown(String),
}
impl GuaranteedStopLossOrderMutability {
pub fn as_str(&self) -> &str {
match self {
Self::Fixed => "FIXED",
Self::Replaceable => "REPLACEABLE",
Self::Cancelable => "CANCELABLE",
Self::PriceWidenOnly => "PRICE_WIDEN_ONLY",
Self::Unknown(value) => value,
}
}
}
impl Serialize for GuaranteedStopLossOrderMutability {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
serializer.serialize_str(self.as_str())
}
}
impl<'de> Deserialize<'de> for GuaranteedStopLossOrderMutability {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let value = String::deserialize(deserializer)?;
Ok(match value.as_str() {
"FIXED" => Self::Fixed,
"REPLACEABLE" => Self::Replaceable,
"CANCELABLE" => Self::Cancelable,
"PRICE_WIDEN_ONLY" => Self::PriceWidenOnly,
_ => Self::Unknown(value),
})
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AccountSummary {
#[serde(rename = "id", default, skip_serializing_if = "Option::is_none")]
pub id: Option<AccountID>,
#[serde(rename = "alias", default, skip_serializing_if = "Option::is_none")]
pub alias: Option<String>,
#[serde(rename = "currency", default, skip_serializing_if = "Option::is_none")]
pub currency: Option<Currency>,
#[serde(
rename = "createdByUserID",
default,
skip_serializing_if = "Option::is_none"
)]
pub created_by_user_id: Option<i64>,
#[serde(
rename = "createdTime",
default,
skip_serializing_if = "Option::is_none"
)]
pub created_time: Option<Timestamp>,
#[serde(
rename = "guaranteedStopLossOrderParameters",
default,
skip_serializing_if = "Option::is_none"
)]
pub guaranteed_stop_loss_order_parameters: Option<GuaranteedStopLossOrderParameters>,
#[serde(
rename = "guaranteedStopLossOrderMode",
default,
skip_serializing_if = "Option::is_none"
)]
pub guaranteed_stop_loss_order_mode: Option<GuaranteedStopLossOrderMode>,
#[serde(
rename = "guaranteedStopLossOrderMutability",
default,
skip_serializing_if = "Option::is_none"
)]
pub guaranteed_stop_loss_order_mutability: Option<GuaranteedStopLossOrderMutability>,
#[serde(
rename = "resettablePLTime",
default,
skip_serializing_if = "Option::is_none"
)]
pub resettable_pl_time: Option<Timestamp>,
#[serde(
rename = "marginRate",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_rate: Option<Decimal>,
#[serde(
rename = "openTradeCount",
default,
skip_serializing_if = "Option::is_none"
)]
pub open_trade_count: Option<i64>,
#[serde(
rename = "openPositionCount",
default,
skip_serializing_if = "Option::is_none"
)]
pub open_position_count: Option<i64>,
#[serde(
rename = "pendingOrderCount",
default,
skip_serializing_if = "Option::is_none"
)]
pub pending_order_count: Option<i64>,
#[serde(
rename = "hedgingEnabled",
default,
skip_serializing_if = "Option::is_none"
)]
pub hedging_enabled: Option<bool>,
#[serde(
rename = "unrealizedPL",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub unrealized_pl: Option<Decimal>,
#[serde(rename = "NAV", default, skip_serializing_if = "Option::is_none")]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub nav: Option<Decimal>,
#[serde(
rename = "marginUsed",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_used: Option<Decimal>,
#[serde(
rename = "marginAvailable",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_available: Option<Decimal>,
#[serde(
rename = "positionValue",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub position_value: Option<Decimal>,
#[serde(
rename = "marginCloseoutUnrealizedPL",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_unrealized_pl: Option<Decimal>,
#[serde(
rename = "marginCloseoutNAV",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_nav: Option<Decimal>,
#[serde(
rename = "marginCloseoutMarginUsed",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_margin_used: Option<Decimal>,
#[serde(
rename = "marginCloseoutPercent",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_percent: Option<Decimal>,
#[serde(
rename = "marginCloseoutPositionValue",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_position_value: Option<Decimal>,
#[serde(
rename = "withdrawalLimit",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub withdrawal_limit: Option<Decimal>,
#[serde(
rename = "marginCallMarginUsed",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_call_margin_used: Option<Decimal>,
#[serde(
rename = "marginCallPercent",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_call_percent: Option<Decimal>,
#[serde(rename = "balance", default, skip_serializing_if = "Option::is_none")]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub balance: Option<Decimal>,
#[serde(rename = "pl", default, skip_serializing_if = "Option::is_none")]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub pl: Option<Decimal>,
#[serde(
rename = "resettablePL",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub resettable_pl: Option<Decimal>,
#[serde(rename = "financing", default, skip_serializing_if = "Option::is_none")]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub financing: Option<Decimal>,
#[serde(
rename = "commission",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub commission: Option<Decimal>,
#[serde(
rename = "dividendAdjustment",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub dividend_adjustment: Option<Decimal>,
#[serde(
rename = "guaranteedExecutionFees",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub guaranteed_execution_fees: Option<Decimal>,
#[serde(
rename = "marginCallEnterTime",
default,
skip_serializing_if = "Option::is_none"
)]
pub margin_call_enter_time: Option<Timestamp>,
#[serde(
rename = "marginCallExtensionCount",
default,
skip_serializing_if = "Option::is_none"
)]
pub margin_call_extension_count: Option<i64>,
#[serde(
rename = "lastMarginCallExtensionTime",
default,
skip_serializing_if = "Option::is_none"
)]
pub last_margin_call_extension_time: Option<Timestamp>,
#[serde(
rename = "lastTransactionID",
default,
skip_serializing_if = "Option::is_none"
)]
pub last_transaction_id: Option<TransactionID>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AccumulatedAccountState {
#[serde(rename = "balance", default, skip_serializing_if = "Option::is_none")]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub balance: Option<Decimal>,
#[serde(rename = "pl", default, skip_serializing_if = "Option::is_none")]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub pl: Option<Decimal>,
#[serde(
rename = "resettablePL",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub resettable_pl: Option<Decimal>,
#[serde(rename = "financing", default, skip_serializing_if = "Option::is_none")]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub financing: Option<Decimal>,
#[serde(
rename = "commission",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub commission: Option<Decimal>,
#[serde(
rename = "dividendAdjustment",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub dividend_adjustment: Option<Decimal>,
#[serde(
rename = "guaranteedExecutionFees",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub guaranteed_execution_fees: Option<Decimal>,
#[serde(
rename = "marginCallEnterTime",
default,
skip_serializing_if = "Option::is_none"
)]
pub margin_call_enter_time: Option<Timestamp>,
#[serde(
rename = "marginCallExtensionCount",
default,
skip_serializing_if = "Option::is_none"
)]
pub margin_call_extension_count: Option<i64>,
#[serde(
rename = "lastMarginCallExtensionTime",
default,
skip_serializing_if = "Option::is_none"
)]
pub last_margin_call_extension_time: Option<Timestamp>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CalculatedAccountState {
#[serde(
rename = "unrealizedPL",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub unrealized_pl: Option<Decimal>,
#[serde(rename = "NAV", default, skip_serializing_if = "Option::is_none")]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub nav: Option<Decimal>,
#[serde(
rename = "marginUsed",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_used: Option<Decimal>,
#[serde(
rename = "marginAvailable",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_available: Option<Decimal>,
#[serde(
rename = "positionValue",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub position_value: Option<Decimal>,
#[serde(
rename = "marginCloseoutUnrealizedPL",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_unrealized_pl: Option<Decimal>,
#[serde(
rename = "marginCloseoutNAV",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_nav: Option<Decimal>,
#[serde(
rename = "marginCloseoutMarginUsed",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_margin_used: Option<Decimal>,
#[serde(
rename = "marginCloseoutPercent",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_percent: Option<Decimal>,
#[serde(
rename = "marginCloseoutPositionValue",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_closeout_position_value: Option<Decimal>,
#[serde(
rename = "withdrawalLimit",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub withdrawal_limit: Option<Decimal>,
#[serde(
rename = "marginCallMarginUsed",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_call_margin_used: Option<Decimal>,
#[serde(
rename = "marginCallPercent",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub margin_call_percent: Option<Decimal>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AccountChanges {
#[serde(
rename = "ordersCreated",
default,
skip_serializing_if = "Option::is_none"
)]
pub orders_created: Option<Vec<Order>>,
#[serde(
rename = "ordersCancelled",
default,
skip_serializing_if = "Option::is_none"
)]
pub orders_cancelled: Option<Vec<Order>>,
#[serde(
rename = "ordersFilled",
default,
skip_serializing_if = "Option::is_none"
)]
pub orders_filled: Option<Vec<Order>>,
#[serde(
rename = "ordersTriggered",
default,
skip_serializing_if = "Option::is_none"
)]
pub orders_triggered: Option<Vec<Order>>,
#[serde(
rename = "tradesOpened",
default,
skip_serializing_if = "Option::is_none"
)]
pub trades_opened: Option<Vec<TradeSummary>>,
#[serde(
rename = "tradesReduced",
default,
skip_serializing_if = "Option::is_none"
)]
pub trades_reduced: Option<Vec<TradeSummary>>,
#[serde(
rename = "tradesClosed",
default,
skip_serializing_if = "Option::is_none"
)]
pub trades_closed: Option<Vec<TradeSummary>>,
#[serde(rename = "positions", default, skip_serializing_if = "Option::is_none")]
pub positions: Option<Vec<Position>>,
#[serde(
rename = "transactions",
default,
skip_serializing_if = "Option::is_none"
)]
pub transactions: Option<Vec<Transaction>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum AccountFinancingMode {
NoFinancing,
SecondBySecond,
Daily,
Unknown(String),
}
impl AccountFinancingMode {
pub fn as_str(&self) -> &str {
match self {
Self::NoFinancing => "NO_FINANCING",
Self::SecondBySecond => "SECOND_BY_SECOND",
Self::Daily => "DAILY",
Self::Unknown(value) => value,
}
}
}
impl Serialize for AccountFinancingMode {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
serializer.serialize_str(self.as_str())
}
}
impl<'de> Deserialize<'de> for AccountFinancingMode {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let value = String::deserialize(deserializer)?;
Ok(match value.as_str() {
"NO_FINANCING" => Self::NoFinancing,
"SECOND_BY_SECOND" => Self::SecondBySecond,
"DAILY" => Self::Daily,
_ => Self::Unknown(value),
})
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UserAttributes {
#[serde(rename = "userID", default, skip_serializing_if = "Option::is_none")]
pub user_id: Option<i64>,
#[serde(rename = "username", default, skip_serializing_if = "Option::is_none")]
pub username: Option<String>,
#[serde(rename = "title", default, skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(rename = "name", default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(rename = "email", default, skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(
rename = "divisionAbbreviation",
default,
skip_serializing_if = "Option::is_none"
)]
pub division_abbreviation: Option<String>,
#[serde(
rename = "languageAbbreviation",
default,
skip_serializing_if = "Option::is_none"
)]
pub language_abbreviation: Option<String>,
#[serde(
rename = "homeCurrency",
default,
skip_serializing_if = "Option::is_none"
)]
pub home_currency: Option<Currency>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum PositionAggregationMode {
AbsoluteSum,
MaximalSide,
NetSum,
Unknown(String),
}
impl PositionAggregationMode {
pub fn as_str(&self) -> &str {
match self {
Self::AbsoluteSum => "ABSOLUTE_SUM",
Self::MaximalSide => "MAXIMAL_SIDE",
Self::NetSum => "NET_SUM",
Self::Unknown(value) => value,
}
}
}
impl Serialize for PositionAggregationMode {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
serializer.serialize_str(self.as_str())
}
}
impl<'de> Deserialize<'de> for PositionAggregationMode {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let value = String::deserialize(deserializer)?;
Ok(match value.as_str() {
"ABSOLUTE_SUM" => Self::AbsoluteSum,
"MAXIMAL_SIDE" => Self::MaximalSide,
"NET_SUM" => Self::NetSum,
_ => Self::Unknown(value),
})
}
}