shadowsocks_rust/
error.rs

1//! Shadowsocks-specific error encoding.
2
3/// A result with a shadowsocks-specific error.
4pub type ShadowsocksResult<T = ()> = Result<T, ShadowsocksError>;
5
6/// A generic error class which encodes all possible ways the application can
7/// fail, along with debug information.
8#[derive(Clone, Debug)]
9pub enum ShadowsocksError {
10    ServerExitUnexpectedly(String),
11    ServerAborted(String),
12    LoadConfigFailure(String),
13    LoadAclFailure(String),
14    InsufficientParams(String),
15}
16
17impl ShadowsocksError {
18    /// The corresponding `sysexits::ExitCode` for this error.
19    pub fn exit_code(&self) -> sysexits::ExitCode {
20        match self {
21            Self::ServerExitUnexpectedly(_) | Self::ServerAborted(_) => sysexits::ExitCode::Software,
22            Self::LoadConfigFailure(_) | Self::LoadAclFailure(_) => sysexits::ExitCode::Config,
23            Self::InsufficientParams(_) => sysexits::ExitCode::Usage,
24        }
25    }
26}
27
28impl std::fmt::Display for ShadowsocksError {
29    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
30        match self {
31            Self::ServerExitUnexpectedly(msg)
32            | Self::ServerAborted(msg)
33            | Self::LoadConfigFailure(msg)
34            | Self::LoadAclFailure(msg)
35            | Self::InsufficientParams(msg) => write!(f, "{msg}"),
36        }
37    }
38}
39
40impl std::error::Error for ShadowsocksError {}