feat: adjust builtin script and support meta guard script

This commit is contained in:
GyDi
2022-11-22 12:00:48 +08:00
parent 4046f143f6
commit fe8168784f
4 changed files with 83 additions and 22 deletions

View File

@@ -17,6 +17,13 @@ pub enum ChainType {
Script(String),
}
#[derive(Debug, Clone)]
pub enum ChainSupport {
Clash,
ClashMeta,
All,
}
impl From<&PrfItem> for Option<ChainItem> {
fn from(item: &PrfItem) -> Self {
let itype = item.itype.as_ref()?.as_str();
@@ -44,13 +51,39 @@ impl From<&PrfItem> for Option<ChainItem> {
impl ChainItem {
/// 内建支持一些脚本
pub fn builtin() -> Vec<ChainItem> {
// meta 1.13.2 alpn string 转 数组
let hy_alpn = ChainItem {
uid: "verge_hy_alpn".into(),
data: ChainType::Script(include_str!("./builtin/hy_alpn.js").into()),
};
pub fn builtin() -> Vec<(ChainSupport, ChainItem)> {
// meta 的一些处理
let meta_guard =
ChainItem::to_script("verge_meta_guard", include_str!("./builtin/meta_guard.js"));
vec![hy_alpn]
// meta 1.13.2 alpn string 转 数组
let hy_alpn =
ChainItem::to_script("verge_hy_alpn", include_str!("./builtin/meta_hy_alpn.js"));
vec![
(ChainSupport::ClashMeta, hy_alpn),
(ChainSupport::ClashMeta, meta_guard),
]
}
pub fn to_script<U: Into<String>, D: Into<String>>(uid: U, data: D) -> Self {
Self {
uid: uid.into(),
data: ChainType::Script(data.into()),
}
}
}
impl ChainSupport {
pub fn is_support(&self, core: Option<&String>) -> bool {
match core {
Some(core) => match (self, core.as_str()) {
(ChainSupport::All, _) => true,
(ChainSupport::Clash, "clash") => true,
(ChainSupport::ClashMeta, "clash-meta") => true,
_ => false,
},
None => true,
}
}
}