binance_async_api/
errors.rs

1use reqwest::{StatusCode, header::HeaderMap};
2use serde::Deserialize;
3use thiserror::Error;
4use tokio_tungstenite::tungstenite;
5
6#[derive(Deserialize, Debug, Clone)]
7pub struct BinanceResponseError {
8    pub code: i64,
9    pub msg: String,
10}
11
12#[derive(Debug, Clone)]
13pub struct BinanceResponse<T> {
14    pub status_code: StatusCode,
15    pub headers: HeaderMap,
16    pub content: T,
17}
18
19#[derive(Deserialize, Debug, Clone)]
20#[serde(untagged)]
21pub(crate) enum BinanceResponseContent<T> {
22    Success(T),
23    Error(BinanceResponseError),
24}
25
26#[derive(Debug, Error)]
27pub enum BinanceError {
28    #[error("Api key is invalid")]
29    InvalidApiKey,
30    #[error("No Api key set for private api")]
31    MissingApiKey,
32    #[error("No Api secret set for private api")]
33    MissingApiSecret,
34    #[error("Error when try to connect websocket: {status_code} - {body}")]
35    StartWebsocketError {
36        status_code: StatusCode,
37        headers: HeaderMap,
38        body: String,
39    },
40    #[error("Binance returns error: {} - {}", content.code, content.msg)]
41    BinanceResponse {
42        status_code: StatusCode,
43        headers: HeaderMap,
44        content: BinanceResponseError,
45    },
46
47    #[error(transparent)]
48    WebsocketError(#[from] tungstenite::Error),
49    #[error(transparent)]
50    RequestError(#[from] reqwest::Error),
51}