Skip to main content

coinbase_pro_rs/
error.rs

1// use crate::structs::other::Error;
2#![forbid(missing_docs)]
3use serde::{Deserialize, Deserializer, Serialize};
4use thiserror::Error;
5
6/// Coinbase-pro-rs error
7#[non_exhaustive]
8#[derive(Debug, Error)]
9pub enum CBError {
10    /// Http error
11    #[error("http: {0}")]
12    Http(#[source] hyper::Error),
13
14    /// Serde error
15    #[error("serde: {error}\n    {data}")]
16    Serde {
17        /// Underlying json error
18        #[source]
19        error: serde_json::Error,
20
21        /// Data associated with serde error
22        data: String,
23    },
24
25    /// Coinbase Error
26    #[error("coinbase: {0:?}")]
27    Coinbase(CoinbaseError),
28
29    /// Websocket error
30    #[error("websocket: {0}")]
31    Websocket(WSError),
32
33    /// Null error
34    #[error("null")]
35    Null,
36}
37
38impl PartialEq for CBError {
39    fn eq(&self, other: &Self) -> bool {
40        match self {
41            // Errors aren't equal
42            CBError::Http(_) => false,
43            CBError::Serde { .. } => false,
44            CBError::Coinbase(s) => {
45                if let CBError::Coinbase(o) = other {
46                    s == o
47                } else {
48                    false
49                }
50            }
51            CBError::Websocket(_) => false,
52            CBError::Null => true,
53        }
54    }
55}
56
57/// Websocket specific errors
58#[non_exhaustive]
59#[derive(Debug, Error)]
60pub enum WSError {
61    /// Error making Websocket connection
62    #[error("connect")]
63    Connect(#[source] tokio_tungstenite::tungstenite::Error),
64
65    /// Error sending websocket message
66    #[error("send")]
67    Send(#[source] tokio_tungstenite::tungstenite::Error),
68
69    /// Error reading from websocket
70    #[error("read")]
71    Read(#[source] tokio_tungstenite::tungstenite::Error),
72}
73
74impl<'de> Deserialize<'de> for WSError {
75    fn deserialize<D>(_deserializer: D) -> Result<Self, D::Error>
76    where
77        D: Deserializer<'de>,
78    {
79        unimplemented!()
80    }
81}
82
83impl<'de> Deserialize<'de> for CBError {
84    fn deserialize<D>(_deserializer: D) -> Result<Self, D::Error>
85    where
86        D: Deserializer<'de>,
87    {
88        unimplemented!()
89    }
90}
91
92#[derive(Debug, Serialize, Deserialize, PartialEq)]
93pub struct CoinbaseError {
94    message: String,
95}