summaryrefslogtreecommitdiffstats
path: root/src/configuration/error.rs
blob: b7d7bb0205df1743d8b19be553b4e372cfec9ecd (plain) (blame)
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
60
use std::error::Error;
use std::fmt;

#[derive(Debug)]
pub enum ConfigError {
    NoSuchPeer,
    NotListening,
    FailedToBind,
    InvalidHexValue,
    InvalidPortNumber,
    InvalidFwmark,
    InvalidKey,
    InvalidSocketAddr,
    InvalidKeepaliveInterval,
    InvalidAllowedIp,
    InvalidOperation,
    LineTooLong,
    IOError,
    UnsupportedValue,
    UnsupportedProtocolVersion,
}

impl fmt::Display for ConfigError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "ConfigError(errno = {})", self.errno())
    }
}

impl Error for ConfigError {
    fn description(&self) -> &str {
        ""
    }

    fn source(&self) -> Option<&(dyn Error + 'static)> {
        None
    }
}

impl ConfigError {
    pub fn errno(&self) -> i32 {
        // TODO: obtain the correct errorno values
        match self {
            ConfigError::NoSuchPeer => 1,
            ConfigError::NotListening => 2,
            ConfigError::FailedToBind => 3,
            ConfigError::InvalidHexValue => 4,
            ConfigError::InvalidPortNumber => 5,
            ConfigError::InvalidFwmark => 6,
            ConfigError::InvalidSocketAddr => 10,
            ConfigError::InvalidKeepaliveInterval => 11,
            ConfigError::InvalidAllowedIp => 12,
            ConfigError::InvalidOperation => 15,
            ConfigError::UnsupportedValue => 7,
            ConfigError::LineTooLong => 13,
            ConfigError::InvalidKey => 8,
            ConfigError::UnsupportedProtocolVersion => 9,
            ConfigError::IOError => 14,
        }
    }
}