use serde::Deserialize;
use serde_json::Value;
use super::ExtraFields;
use crate::model::NumberString;
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct BlockLeg {
#[serde(default)]
pub inst_id: String,
#[serde(default)]
pub td_mode: String,
#[serde(default)]
pub ccy: String,
#[serde(default)]
pub sz: NumberString,
#[serde(default)]
pub side: String,
#[serde(default)]
pub pos_side: String,
#[serde(default)]
pub px: NumberString,
#[serde(default)]
pub trade_id: String,
#[serde(default)]
pub tgt_ccy: String,
#[serde(default)]
pub fee: NumberString,
#[serde(default)]
pub fee_ccy: String,
#[serde(default)]
pub trade_quote_ccy: String,
#[serde(flatten, default)]
pub extra: ExtraFields,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct BlockRfqUpdate {
#[serde(default)]
pub rfq_id: String,
#[serde(default)]
pub cl_rfq_id: String,
#[serde(default)]
pub tag: String,
#[serde(default)]
pub trader_code: String,
#[serde(default)]
pub valid_until: NumberString,
#[serde(default)]
pub counterparties: Vec<String>,
#[serde(default)]
pub legs: Vec<BlockLeg>,
#[serde(default)]
pub allow_partial_execution: bool,
#[serde(default)]
pub state: String,
#[serde(default)]
pub flow_type: String,
#[serde(default)]
pub group_id: String,
#[serde(default)]
pub acct_alloc: Vec<Value>,
#[serde(default)]
pub c_time: NumberString,
#[serde(default)]
pub u_time: NumberString,
#[serde(flatten, default)]
pub extra: ExtraFields,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct BlockQuoteUpdate {
#[serde(default)]
pub quote_id: String,
#[serde(default)]
pub cl_quote_id: String,
#[serde(default)]
pub rfq_id: String,
#[serde(default)]
pub cl_rfq_id: String,
#[serde(default)]
pub tag: String,
#[serde(default)]
pub trader_code: String,
#[serde(default)]
pub quote_side: String,
#[serde(default)]
pub valid_until: NumberString,
#[serde(default)]
pub legs: Vec<BlockLeg>,
#[serde(default)]
pub state: String,
#[serde(default)]
pub reason: String,
#[serde(default)]
pub c_time: NumberString,
#[serde(default)]
pub u_time: NumberString,
#[serde(flatten, default)]
pub extra: ExtraFields,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct StructureBlockTradeUpdate {
#[serde(default)]
pub block_td_id: String,
#[serde(default)]
pub rfq_id: String,
#[serde(default)]
pub cl_rfq_id: String,
#[serde(default)]
pub quote_id: String,
#[serde(default)]
pub cl_quote_id: String,
#[serde(default)]
pub tag: String,
#[serde(default)]
pub is_successful: bool,
#[serde(default)]
pub error_code: String,
#[serde(default)]
pub t_trader_code: String,
#[serde(default)]
pub m_trader_code: String,
#[serde(default)]
pub legs: Vec<BlockLeg>,
#[serde(default)]
pub acct_alloc: Vec<Value>,
#[serde(default)]
pub c_time: NumberString,
#[serde(flatten, default)]
pub extra: ExtraFields,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct PublicBlockTradeUpdate {
#[serde(default)]
pub inst_id: String,
#[serde(default)]
pub trade_id: String,
#[serde(default)]
pub px: NumberString,
#[serde(default)]
pub sz: NumberString,
#[serde(default)]
pub side: String,
#[serde(default)]
pub fill_vol: NumberString,
#[serde(default)]
pub fwd_px: NumberString,
#[serde(default)]
pub idx_px: NumberString,
#[serde(default)]
pub mark_px: NumberString,
#[serde(default)]
pub group_id: String,
#[serde(default)]
pub ts: NumberString,
#[serde(flatten, default)]
pub extra: ExtraFields,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct PublicStructureBlockTradeUpdate {
#[serde(default)]
pub block_td_id: String,
#[serde(default)]
pub group_id: String,
#[serde(default)]
pub legs: Vec<BlockLeg>,
#[serde(default)]
pub c_time: NumberString,
#[serde(flatten, default)]
pub extra: ExtraFields,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct BlockTickerUpdate {
#[serde(default)]
pub inst_type: String,
#[serde(default)]
pub inst_id: String,
#[serde(default)]
pub vol_ccy24h: NumberString,
#[serde(default)]
pub vol24h: NumberString,
#[serde(default)]
pub ts: NumberString,
#[serde(flatten, default)]
pub extra: ExtraFields,
}