reala_subscription/
model.rs1use std::sync::Arc;
4
5use crate::Error;
6
7mod clash;
8mod url;
9
10#[derive(Debug, Clone)]
11pub enum Proxy {
13 Shadowsocks {
15 server: Arc<str>,
17
18 port: u16,
20
21 password: Arc<str>,
23
24 cipher: Arc<str>,
26 },
27}
28
29impl Proxy {
30 #[inline]
31 pub fn parse_clash_compatible(config: &str) -> Result<Vec<Self>, Error> {
35 let parsed = self::clash::Config::parse(config)?;
36
37 let parsed: Vec<_> = parsed
38 .proxies
39 .into_iter()
40 .filter_map(|p| match p {
41 self::clash::Proxy::Shadowsocks {
42 server,
43 port,
44 password,
45 cipher,
46 } => Some(Self::Shadowsocks {
47 server,
48 port,
49 password,
50 cipher,
51 }),
52 _ => None,
53 })
54 .collect();
55
56 Ok(parsed)
57 }
58}