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}