Skip to main content

binance_sdk/spot/websocket_api/models/
user_data_stream_events_response.rs

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