1use thiserror::Error;
4
5#[derive(Debug, Error)]
6pub enum Error {
7 #[error("Invalid packet: {0}")]
8 InvalidPacket(&'static str),
9
10 #[error("Crypto error: {0}")]
11 Crypto(String),
12
13 #[error("IO error: {0}")]
14 Io(#[from] std::io::Error),
15
16 #[error("Serialization error: {0}")]
17 Serialization(String),
18
19 #[error("Session error: {0}")]
20 Session(String),
21
22 #[error("Mask error: {0}")]
23 Mask(String),
24
25 #[error("Channel error: {0}")]
26 Channel(String),
27}
28
29impl From<chacha20poly1305::Error> for Error {
30 fn from(err: chacha20poly1305::Error) -> Self {
31 Error::Crypto(err.to_string())
32 }
33}
34
35impl From<rmp_serde::encode::Error> for Error {
36 fn from(err: rmp_serde::encode::Error) -> Self {
37 Error::Serialization(err.to_string())
38 }
39}
40
41impl From<rmp_serde::decode::Error> for Error {
42 fn from(err: rmp_serde::decode::Error) -> Self {
43 Error::Serialization(err.to_string())
44 }
45}
46
47impl From<serde_json::Error> for Error {
48 fn from(err: serde_json::Error) -> Self {
49 Error::Serialization(err.to_string())
50 }
51}
52
53pub type Result<T> = std::result::Result<T, Error>;