1#![forbid(missing_docs)]
3use serde::{Deserialize, Deserializer, Serialize};
4use thiserror::Error;
5
6#[non_exhaustive]
8#[derive(Debug, Error)]
9pub enum CBError {
10 #[error("http: {0}")]
12 Http(#[source] hyper::Error),
13
14 #[error("serde: {error}\n {data}")]
16 Serde {
17 #[source]
19 error: serde_json::Error,
20
21 data: String,
23 },
24
25 #[error("coinbase: {0:?}")]
27 Coinbase(CoinbaseError),
28
29 #[error("websocket: {0}")]
31 Websocket(WSError),
32
33 #[error("null")]
35 Null,
36}
37
38impl PartialEq for CBError {
39 fn eq(&self, other: &Self) -> bool {
40 match self {
41 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#[non_exhaustive]
59#[derive(Debug, Error)]
60pub enum WSError {
61 #[error("connect")]
63 Connect(#[source] tokio_tungstenite::tungstenite::Error),
64
65 #[error("send")]
67 Send(#[source] tokio_tungstenite::tungstenite::Error),
68
69 #[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}