@@ -29,6 +29,13 @@ pub struct BinanceApi {
29
29
api_secret : String ,
30
30
}
31
31
32
+ #[ derive( serde:: Deserialize ) ]
33
+ #[ serde( untagged) ]
34
+ pub enum BinanceApiResponse < T > {
35
+ Success ( T ) ,
36
+ Error { code : i32 , msg : String } ,
37
+ }
38
+
32
39
impl BinanceApi {
33
40
pub fn new ( api_key : String , api_secret : String , base_url : Option < String > ) -> BinanceApi {
34
41
let base_url = match base_url {
@@ -85,10 +92,20 @@ impl BinanceApi {
85
92
86
93
debug ! ( "Binance-api make_public_get_request response: {:?}" , response) ;
87
94
88
- response. json :: < T > ( ) . await . map_err ( |e| {
89
- error ! ( "Error parsing response: {}" , e) ;
90
- Error :: ParseResponseFailed
91
- } )
95
+ response
96
+ . json :: < BinanceApiResponse < T > > ( )
97
+ . await
98
+ . map_err ( |e| {
99
+ error ! ( "Error parsing response: {}" , e) ;
100
+ Error :: ParseResponseFailed
101
+ } )
102
+ . and_then ( |res| match res {
103
+ BinanceApiResponse :: Success ( data) => Ok ( data) ,
104
+ BinanceApiResponse :: Error { code, msg } => {
105
+ error ! ( "Binance API Error: {} - {}" , code, msg) ;
106
+ Err ( Error :: RequestFailed )
107
+ } ,
108
+ } )
92
109
}
93
110
94
111
/// Helper for making signed API requests
@@ -155,10 +172,20 @@ impl BinanceApi {
155
172
156
173
debug ! ( "Binance-api make_signed_request response: {:?}" , response) ;
157
174
158
- response. json :: < T > ( ) . await . map_err ( |e| {
159
- error ! ( "Error parsing response: {}" , e) ;
160
- Error :: ParseResponseFailed
161
- } )
175
+ response
176
+ . json :: < BinanceApiResponse < T > > ( )
177
+ . await
178
+ . map_err ( |e| {
179
+ error ! ( "Error parsing response: {}" , e) ;
180
+ Error :: ParseResponseFailed
181
+ } )
182
+ . and_then ( |res| match res {
183
+ BinanceApiResponse :: Success ( data) => Ok ( data) ,
184
+ BinanceApiResponse :: Error { code, msg } => {
185
+ error ! ( "Binance API Error: {} - {}" , code, msg) ;
186
+ Err ( Error :: RequestFailed )
187
+ } ,
188
+ } )
162
189
}
163
190
}
164
191
0 commit comments