#[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 ClientPrice {
#[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
pub r#type: Option<String>,
#[serde(
rename = "instrument",
default,
skip_serializing_if = "Option::is_none"
)]
pub instrument: Option<InstrumentName>,
#[serde(rename = "time", default, skip_serializing_if = "Option::is_none")]
pub time: Option<Timestamp>,
#[serde(rename = "status", default, skip_serializing_if = "Option::is_none")]
pub status: Option<PriceStatus>,
#[serde(rename = "tradeable", default, skip_serializing_if = "Option::is_none")]
pub tradeable: Option<bool>,
#[serde(rename = "bids", default, skip_serializing_if = "Option::is_none")]
pub bids: Option<Vec<PriceBucket>>,
#[serde(rename = "asks", default, skip_serializing_if = "Option::is_none")]
pub asks: Option<Vec<PriceBucket>>,
#[serde(
rename = "closeoutBid",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub closeout_bid: Option<Decimal>,
#[serde(
rename = "closeoutAsk",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub closeout_ask: Option<Decimal>,
#[serde(
rename = "quoteHomeConversionFactors",
default,
skip_serializing_if = "Option::is_none"
)]
pub quote_home_conversion_factors: Option<QuoteHomeConversionFactors>,
#[serde(
rename = "unitsAvailable",
default,
skip_serializing_if = "Option::is_none"
)]
pub units_available: Option<UnitsAvailable>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum PriceStatus {
Tradeable,
NonTradeable,
Invalid,
Unknown(String),
}
impl PriceStatus {
pub fn as_str(&self) -> &str {
match self {
Self::Tradeable => "tradeable",
Self::NonTradeable => "non-tradeable",
Self::Invalid => "invalid",
Self::Unknown(value) => value,
}
}
}
impl Serialize for PriceStatus {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
serializer.serialize_str(self.as_str())
}
}
impl<'de> Deserialize<'de> for PriceStatus {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let value = String::deserialize(deserializer)?;
Ok(match value.as_str() {
"tradeable" => Self::Tradeable,
"non-tradeable" => Self::NonTradeable,
"invalid" => Self::Invalid,
_ => Self::Unknown(value),
})
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct QuoteHomeConversionFactors {
#[serde(
rename = "positiveUnits",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub positive_units: Option<Decimal>,
#[serde(
rename = "negativeUnits",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub negative_units: Option<Decimal>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct HomeConversions {
#[serde(rename = "currency", default, skip_serializing_if = "Option::is_none")]
pub currency: Option<Currency>,
#[serde(
rename = "accountGain",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub account_gain: Option<Decimal>,
#[serde(
rename = "accountLoss",
default,
skip_serializing_if = "Option::is_none"
)]
#[serde(deserialize_with = "crate::decimal_wire::optional_number_or_string")]
pub account_loss: 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>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PricingHeartbeat {
#[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
pub r#type: Option<String>,
#[serde(rename = "time", default, skip_serializing_if = "Option::is_none")]
pub time: Option<Timestamp>,
}