Skip to main content

aivpn_common/
error.rs

1//! AIVPN Error Types
2
3use 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>;