rust_okx/ws/response/
mod.rs1mod acknowledgement;
7mod operation;
8mod push;
9mod spread;
10mod trade;
11
12use std::collections::BTreeMap;
13
14use serde_json::Value;
15
16pub type ResponseExtraFields = BTreeMap<String, Value>;
18
19pub use acknowledgement::{
20 ChannelAcknowledgement, ChannelConnectionCountResponse, LoginAcknowledgement, NoticeResponse,
21};
22pub use operation::OperationResponse;
23pub use push::PushResponse;
24pub use spread::{
25 AmendSpreadOrderResponse, CancelSpreadOrderResponse, MassCancelSpreadOrdersResponse,
26 PlaceSpreadOrderResponse,
27};
28pub use trade::{
29 AmendOrderResponse, CancelOrderResponse, MassCancelOrdersResponse, PlaceOrderResponse,
30};
31
32#[cfg(test)]
33mod tests {
34 use super::*;
35 use crate::ws::model::TickerUpdate;
36
37 #[test]
38 fn parses_complete_channel_push_envelope() {
39 let response: PushResponse<TickerUpdate> = serde_json::from_str(
40 r#"{"arg":{"channel":"tickers","instId":"BTC-USDT"},"data":[{"instType":"SPOT","instId":"BTC-USDT","last":"1","ts":"2"}]}"#,
41 )
42 .unwrap();
43 assert_eq!(response.arg.channel, "tickers");
44 assert_eq!(response.data[0].inst_id, "BTC-USDT");
45 }
46
47 #[test]
48 fn parses_login_acknowledgement_metadata() {
49 let response: LoginAcknowledgement =
50 serde_json::from_str(r#"{"event":"login","code":"0","msg":"","connId":"abc"}"#)
51 .unwrap();
52 assert_eq!(response.code, "0");
53 assert_eq!(response.conn_id, "abc");
54 }
55}