socks_lib/v5/
method.rs

1/// # Method
2///
3/// ```text
4///  +--------+
5///  | METHOD |
6///  +--------+
7///  |   1    |
8///  +--------+
9/// ```
10///
11#[derive(Debug, Copy, Clone, PartialEq)]
12pub enum Method {
13    NoAuthentication,
14    GSSAPI,
15    UsernamePassword,
16    IanaAssigned(u8),
17    ReservedPrivate(u8),
18    NoAcceptableMethod,
19}
20
21impl Method {
22    #[rustfmt::skip]
23    #[inline]
24    pub fn as_u8(&self) -> u8 {
25        match self {
26            Self::NoAuthentication            => 0x00,
27            Self::GSSAPI                      => 0x01,
28            Self::UsernamePassword            => 0x02,
29            Self::IanaAssigned(value)         => *value,
30            Self::ReservedPrivate(value)      => *value,
31            Self::NoAcceptableMethod          => 0xFF,
32        }
33    }
34
35    #[rustfmt::skip]
36    #[inline]
37    pub fn from_u8(value: u8) -> Self {
38        match value {
39            0x00        => Self::NoAuthentication,
40            0x01        => Self::GSSAPI,
41            0x02        => Self::UsernamePassword,
42            0x03..=0x7F => Self::IanaAssigned(value),
43            0x80..=0xFE => Self::ReservedPrivate(value),
44            0xFF        => Self::NoAcceptableMethod,
45        }
46    }
47}