use std::sync::Arc;
use crate::Error;
mod clash;
mod url;
#[derive(Debug, Clone)]
pub enum Proxy {
Shadowsocks {
server: Arc<str>,
port: u16,
password: Arc<str>,
cipher: Arc<str>,
},
}
impl Proxy {
#[inline]
pub fn parse_clash_compatible(config: &str) -> Result<Vec<Self>, Error> {
let parsed = self::clash::Config::parse(config)?;
let parsed: Vec<_> = parsed
.proxies
.into_iter()
.filter_map(|p| match p {
self::clash::Proxy::Shadowsocks {
server,
port,
password,
cipher,
} => Some(Self::Shadowsocks {
server,
port,
password,
cipher,
}),
_ => None,
})
.collect();
Ok(parsed)
}
}