1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
use pliantdb_core as core;
use pliantdb_core::networking::fabruic;
#[derive(thiserror::Error, Debug)]
pub enum Error {
#[error("a transport error occurred: '{0}'")]
Transport(#[from] fabruic::Error),
#[cfg(feature = "websockets")]
#[error("a transport error occurred: '{0}'")]
WebSocket(#[from] tokio_tungstenite::tungstenite::Error),
#[error("a networking error occurred: '{0}'")]
Network(#[from] pliantdb_core::networking::Error),
#[error("invalid url: '{0}'")]
InvalidUrl(String),
#[error("unexpected disconnection")]
Disconnected,
#[error("unexpected disconnection")]
Core(#[from] core::Error),
}
impl<T> From<flume::SendError<T>> for Error {
fn from(_: flume::SendError<T>) -> Self {
Self::Disconnected
}
}
impl From<flume::RecvError> for Error {
fn from(_: flume::RecvError) -> Self {
Self::Disconnected
}
}
impl From<Error> for core::Error {
fn from(other: Error) -> Self {
Self::Client(other.to_string())
}
}
#[cfg(feature = "websockets")]
impl From<bincode::Error> for Error {
fn from(other: bincode::Error) -> Self {
Self::Core(core::Error::Websocket(format!(
"error decoding websocket message: {:?}",
other
)))
}
}