reconnecting_websocket/
error.rs1use std::fmt::Debug;
2
3use gloo::{
4 net::websocket::{Message, WebSocketError},
5 utils::errors::JsError,
6};
7
8use crate::{error, SocketInput, SocketOutput};
9
10#[derive(Debug, thiserror::Error)]
12pub enum Error<I, O>
13where
14 I: SocketInput,
15 O: SocketOutput,
16 Message: TryFrom<I>,
17 <Message as TryFrom<I>>::Error: Debug,
18 <O as TryFrom<Message>>::Error: Debug,
19{
20 #[error("WebSocketError: {0}")]
25 WebSocketError(WebSocketError),
26
27 #[error("JsError: {0}")]
35 JsError(#[from] JsError),
36
37 #[error("InvalidConfig: {0}")]
41 InvalidConfig(String),
42
43 #[error("Input TryFrom(Message) Err: {0:?}")]
48 InputError(<Message as TryFrom<I>>::Error),
49
50 #[error("Output TryFrom<Message> Err: {0:?}")]
54 OutputError(<O as TryFrom<Message>>::Error),
55}
56
57impl<I, O> From<WebSocketError> for Error<I, O>
58where
59 I: SocketInput,
60 O: SocketOutput,
61 Message: TryFrom<I>,
62 <Message as TryFrom<I>>::Error: Debug,
63 <O as TryFrom<Message>>::Error: Debug,
64{
65 fn from(err: WebSocketError) -> Self {
66 error!("WebSocketError: {err:?}");
67 Self::WebSocketError(err)
68 }
69}
70
71impl<I, O> Error<I, O>
72where
73 I: SocketInput,
74 O: SocketOutput,
75 Message: TryFrom<I>,
76 <Message as TryFrom<I>>::Error: Debug,
77 <O as TryFrom<Message>>::Error: Debug,
78{
79 pub(crate) fn from_input(err: <I as TryInto<Message>>::Error) -> Self {
80 error!("Input TryInto<Message> Error: {err:?}");
81 Self::InputError(err)
82 }
83
84 pub(crate) fn from_output(err: <O as TryFrom<Message>>::Error) -> Self {
85 error!("Output TryFrom<Message> Error: {err:?}");
86 Self::OutputError(err)
87 }
88}