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
use std::fmt::{Display, Formatter, Result}; use std::net::SocketAddr; use super::Connection; #[cfg(feature = "socks5")] use tokio_socks::TargetAddr; pub enum Host { Direct(Vec<SocketAddr>), #[cfg(feature = "socks5")] Socks5( Vec<SocketAddr>, Option<(String, String)>, Vec<TargetAddr<'static>>, ), } impl Host { pub(super) fn into_connection(self) -> Connection { match self { Host::Direct(remote_addrs) => Connection::direct(remote_addrs), #[cfg(feature = "socks5")] Host::Socks5(remote_addrs, credentials, dest_addrs) => { Connection::socks5(remote_addrs, credentials, dest_addrs) } } } } impl Display for Host { fn fmt(&self, f: &mut Formatter) -> Result { match self { Host::Direct(remote_addrs) => write!(f, "{:?}", remote_addrs), #[cfg(feature = "socks5")] Host::Socks5(remote_addrs, _, dest_addrs) => { write!(f, "{:?} via socks5 {:?}", dest_addrs, remote_addrs) } } } }