Skip to main content

rust_okx/ws/model/
mod.rs

1//! Typed response rows for OKX WebSocket channels.
2//!
3//! Every channel exposed by [`crate::ws::channels`] has a corresponding model
4//! below. OKX occasionally adds fields without a version bump, so object rows
5//! keep unrecognized fields in `extra` while still exposing the documented
6//! fields as first-class Rust members.
7//!
8//! Models are organised by OKX's own API documentation categories:
9//!
10//! | Submodule | Category | Auth |
11//! |---|---|---|
12//! | [`market`] | Market Data | Public |
13//! | [`public_data`] | Public Data | Public |
14//! | [`status`] | Status | Public |
15//! | [`account`] | Trading Account | Private |
16//! | [`trade`] | Trade | Private |
17//! | [`algo`] | Algo Trading | Private |
18//! | [`grid`] | Trading Bots | Private |
19//! | [`block`] | Block Trading | Mixed |
20//! | [`spread`] | Spread Trading | Mixed |
21//! | [`funding`] | Funding | Private |
22
23use std::collections::BTreeMap;
24
25use serde::Deserialize;
26use serde_json::Value;
27
28/// Fields added by OKX after this crate was released.
29pub type ExtraFields = BTreeMap<String, Value>;
30
31/// Generic object row for custom/future channels.
32#[derive(Debug, Clone, Default, Deserialize)]
33#[non_exhaustive]
34pub struct WsRow {
35    /// Complete JSON object.
36    #[serde(flatten, default)]
37    pub fields: ExtraFields,
38}
39
40pub mod account;
41pub mod algo;
42pub mod block;
43pub mod funding;
44pub mod grid;
45pub mod market;
46pub mod public_data;
47pub mod spread;
48pub mod status;
49pub mod trade;
50
51// Re-exports — keeping the flat `crate::ws::model::*` namespace
52pub use account::{
53    AccountBalanceUpdate, AccountGreeksUpdate, AccountUpdate, BalData, BalanceAndPositionUpdate,
54    CloseOrderAlgo, LiquidationWarningUpdate, PosData, PositionUpdate, Trade,
55};
56pub use algo::{AdvancedAlgoOrderUpdate, AlgoOrderUpdate, LinkedOrder};
57pub use block::{
58    BlockLeg, BlockQuoteUpdate, BlockRfqUpdate, BlockTickerUpdate, PublicBlockTradeUpdate,
59    PublicStructureBlockTradeUpdate, StructureBlockTradeUpdate,
60};
61pub use funding::{DepositInfoUpdate, WithdrawalInfoUpdate};
62pub use grid::{
63    CopyTradingNotification, GridOrderUpdate, GridPositionUpdate, GridSubOrderUpdate, RebateTrans,
64    RecurringBuyAllocation, RecurringBuyOrderUpdate, TradingBotUpdate, TriggerParam,
65};
66pub use market::{
67    AllTradeUpdate, BookLevel, CallAuctionDetailsUpdate, CandleUpdate, OptionTradeUpdate,
68    OrderBookUpdate, TickerUpdate, TradeUpdate,
69};
70pub use public_data::{
71    AdlWarningUpdate, EconomicCalendarUpdate, EstimatedPriceUpdate, EventContractMarketUpdate,
72    FundingRateUpdate, IndexCandleUpdate, IndexTickerUpdate, InstrumentUpcomingParamChange,
73    InstrumentUpdate, LiquidationOrderDetail, LiquidationOrderUpdate, MarkPriceCandleUpdate,
74    MarkPriceUpdate, OpenInterestUpdate, OptionSummaryUpdate, PriceLimitUpdate,
75};
76pub use spread::{
77    SpreadAmendOrderResult, SpreadCancelOrderResult, SpreadMassCancelResult, SpreadOrderUpdate,
78    SpreadPlaceOrderResult, SpreadPublicTradeUpdate, SpreadTickerUpdate, SpreadTradeLeg,
79    SpreadTradeUpdate,
80};
81pub use status::StatusUpdate;
82pub use trade::{
83    AmendOrderResult, CancelOrderResult, FillUpdate, MassCancelOperationResult, OrderUpdate,
84    PlaceOrderResult,
85};
86
87#[cfg(test)]
88mod compile_checks;