use std::collections::BTreeMap;
use serde::Deserialize;
use serde_json::Value;
pub type ExtraFields = BTreeMap<String, Value>;
macro_rules! ws_object {
(
$(#[$meta:meta])*
$name:ident {
$(
$(#[$field_meta:meta])*
$field:ident: $ty:ty
),* $(,)?
}
) => {
$(#[$meta])*
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct $name {
$(
$(#[$field_meta])*
#[serde(default)]
pub $field: $ty,
)*
#[serde(flatten, default)]
pub extra: ExtraFields,
}
};
}
#[derive(Debug, Clone, Default, Deserialize)]
#[non_exhaustive]
pub struct WsRow {
#[serde(flatten, default)]
pub fields: ExtraFields,
}
pub mod account;
pub mod algo;
pub mod block;
pub mod funding;
pub mod grid;
pub mod market;
pub mod public_data;
pub mod spread;
pub mod status;
pub mod trade;
pub use account::{
AccountBalanceUpdate, AccountGreeksUpdate, AccountUpdate, BalData, BalanceAndPositionBalance,
BalanceAndPositionPosition, BalanceAndPositionTrade, BalanceAndPositionUpdate,
LiquidationWarningUpdate, PosData, PositionUpdate, Trade,
};
pub use algo::{AdvancedAlgoOrderUpdate, AlgoOrderUpdate};
pub use block::{
BlockLeg, BlockQuoteUpdate, BlockRfqUpdate, BlockTickerUpdate, PublicBlockTradeUpdate,
PublicStructureBlockTradeUpdate, StructureBlockTradeUpdate,
};
pub use funding::{DepositInfoUpdate, WithdrawalInfoUpdate};
pub use grid::{
CopyTradingNotification, GridOrderUpdate, GridPositionUpdate, GridSubOrderUpdate,
RecurringBuyAllocation, RecurringBuyOrderUpdate, TradingBotUpdate,
};
pub use market::{
BookLevel, CallAuctionDetailsUpdate, CandleUpdate, OptionTradeUpdate, OrderBookUpdate,
TickerUpdate, TradeUpdate,
};
pub use public_data::{
AdlWarningUpdate, EconomicCalendarUpdate, EstimatedPriceUpdate, EventContractMarketUpdate,
FundingRateUpdate, IndexTickerUpdate, InstrumentUpcomingParamChange, InstrumentUpdate,
LiquidationOrderDetail, LiquidationOrderUpdate, MarkPriceUpdate, OpenInterestUpdate,
OptionSummaryUpdate, PriceLimitUpdate,
};
pub use spread::{
SpreadAmendOrderResult, SpreadCancelOrderResult, SpreadMassCancelResult, SpreadOrderUpdate,
SpreadPlaceOrderResult, SpreadTradeLeg, SpreadTradeUpdate,
};
pub use status::StatusUpdate;
pub use trade::{FillUpdate, MassCancelOperationResult, OrderOperationResult, OrderUpdate};
#[cfg(test)]
mod compile_checks;