Skip to main content

binance_sdk/spot/websocket_api/models/
user_data_stream_events_response.rs

1/*
2 * Spot WebSocket API
3 *
4 * Access market data, manage accounts, and trade on Binance Spot.
5 *
6 * The version of the OpenAPI document: 1.0.0
7 *
8 *
9 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
10 * https://openapi-generator.tech
11 * Do not edit the class manually.
12 */
13
14#![allow(unused_imports)]
15use crate::spot::websocket_api::models;
16use serde::{Deserialize, Deserializer, Serialize, de::Error};
17use serde_json::Value;
18
19#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
20#[serde(try_from = "Value")]
21pub enum UserDataStreamEventsResponse {
22    #[serde(rename = "balanceUpdate")]
23    BalanceUpdate(Box<models::BalanceUpdate>),
24    #[serde(rename = "eventStreamTerminated")]
25    EventStreamTerminated(Box<models::EventStreamTerminated>),
26    #[serde(rename = "executionReport")]
27    ExecutionReport(Box<models::ExecutionReport>),
28    #[serde(rename = "externalLockUpdate")]
29    ExternalLockUpdate(Box<models::ExternalLockUpdate>),
30    #[serde(rename = "listStatus")]
31    ListStatus(Box<models::ListStatus>),
32    #[serde(rename = "outboundAccountPosition")]
33    OutboundAccountPosition(Box<models::OutboundAccountPosition>),
34    Other(serde_json::Value),
35}
36
37impl Default for UserDataStreamEventsResponse {
38    fn default() -> Self {
39        Self::BalanceUpdate(Default::default())
40    }
41}
42
43impl TryFrom<Value> for UserDataStreamEventsResponse {
44    type Error = serde_json::Error;
45
46    fn try_from(v: Value) -> Result<Self, Self::Error> {
47        let tag = v
48            .get("e")
49            .and_then(Value::as_str)
50            .ok_or_else(|| serde_json::Error::custom("missing field `e`"))?;
51
52        match tag {
53            "balanceUpdate" => {
54                let payload = serde_json::from_value(v)?;
55                Ok(UserDataStreamEventsResponse::BalanceUpdate(Box::new(
56                    payload,
57                )))
58            }
59
60            "eventStreamTerminated" => {
61                let payload = serde_json::from_value(v)?;
62                Ok(UserDataStreamEventsResponse::EventStreamTerminated(
63                    Box::new(payload),
64                ))
65            }
66
67            "executionReport" => {
68                let payload = serde_json::from_value(v)?;
69                Ok(UserDataStreamEventsResponse::ExecutionReport(Box::new(
70                    payload,
71                )))
72            }
73
74            "externalLockUpdate" => {
75                let payload = serde_json::from_value(v)?;
76                Ok(UserDataStreamEventsResponse::ExternalLockUpdate(Box::new(
77                    payload,
78                )))
79            }
80
81            "listStatus" => {
82                let payload = serde_json::from_value(v)?;
83                Ok(UserDataStreamEventsResponse::ListStatus(Box::new(payload)))
84            }
85
86            "outboundAccountPosition" => {
87                let payload = serde_json::from_value(v)?;
88                Ok(UserDataStreamEventsResponse::OutboundAccountPosition(
89                    Box::new(payload),
90                ))
91            }
92
93            _ => Ok(UserDataStreamEventsResponse::Other(v)),
94        }
95    }
96}