bybit_async/
error.rs

1use reqwest::header::InvalidHeaderValue;
2use reqwest::StatusCode;
3use serde::Deserialize;
4use thiserror::Error;
5
6#[derive(Deserialize, Debug, Clone)]
7pub struct BybitResponseError {
8    pub code: i64,
9    pub msg: String,
10}
11
12#[derive(Debug, Error)]
13pub enum BybitError {
14    #[error("No Api key set for private api")]
15    MissingApiKey,
16    #[error("No Api secret set for private api")]
17    MissingApiSecret,
18    #[error("Websocket is closed")]
19    WebsocketClosed,
20    #[error("Topics is empty")]
21    EmptyTopics,
22    #[error("Unknown stream {0}")]
23    UnknownStream(String),
24    #[error("Stream {0} not implemented yet")]
25    StreamNotImplemented(String),
26    #[error("User data stream event {0} not implemented yet")]
27    UserDataStreamEventNotImplemented(String),
28    #[error("Error when try to connect websocket: {0} - {1}")]
29    StartWebsocketError(StatusCode, String),
30    #[error("The field for the given event type {0} in user data stream is empty")]
31    EmptyUserDataStream(String),
32    #[error("Bybit returns error: {code} - {msg}")]
33    BybitResponse { code: i64, msg: String },
34
35    #[error(transparent)]
36    Websocket(#[from] tungstenite::Error),
37    #[error(transparent)]
38    SerdeQs(#[from] serde_qs::Error),
39    #[error(transparent)]
40    HttpHeader(#[from] InvalidHeaderValue),
41    #[error(transparent)]
42    Reqwest(#[from] reqwest::Error),
43    #[error(transparent)]
44    SerdeJson(#[from] serde_json::Error),
45}
46
47impl From<BybitResponseError> for BybitError {
48    fn from(v: BybitResponseError) -> Self {
49        Self::BybitResponse {
50            code: v.code,
51            msg: v.msg,
52        }
53    }
54}