s5t 0.2.1

SOCKS5 client with tun2socks and one-time request modes
use crate::prelude::*;

#[derive(Debug, PartialEq, Clone)]
pub enum Mode {
    Socks5,
    Tun2Socks,
    Tun,
}

impl TryFrom<&str> for Mode {
    type Error = AppError;

    fn try_from(value: &str) -> Result<Self, Self::Error> {
        match value {
            "socks5" | "s5" => Ok(Self::Socks5),
            "tun2socks" | "s5t" => Ok(Self::Tun2Socks),
            "tun" | "t" => Ok(Self::Tun),
            _ => Err(AppError::Arguments("invalid mode".into()))
        }
    }
}