socks5_proto/
command.rs

1/// SOCKS5 command
2#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
3pub enum Command {
4    Connect,
5    Bind,
6    Associate,
7}
8
9impl Command {
10    const CONNECT: u8 = 0x01;
11    const BIND: u8 = 0x02;
12    const ASSOCIATE: u8 = 0x03;
13}
14
15impl TryFrom<u8> for Command {
16    type Error = u8;
17
18    fn try_from(code: u8) -> Result<Self, Self::Error> {
19        match code {
20            Self::CONNECT => Ok(Self::Connect),
21            Self::BIND => Ok(Self::Bind),
22            Self::ASSOCIATE => Ok(Self::Associate),
23            code => Err(code),
24        }
25    }
26}
27
28impl From<Command> for u8 {
29    fn from(cmd: Command) -> Self {
30        match cmd {
31            Command::Connect => Command::CONNECT,
32            Command::Bind => Command::BIND,
33            Command::Associate => Command::ASSOCIATE,
34        }
35    }
36}