mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-01-29 00:35:38 +08:00
feat: add clash-verge-types crate and integrate IRuntime struct
This commit is contained in:
10
Cargo.lock
generated
10
Cargo.lock
generated
@@ -1118,6 +1118,7 @@ dependencies = [
|
|||||||
"clash-verge-draft",
|
"clash-verge-draft",
|
||||||
"clash-verge-logging",
|
"clash-verge-logging",
|
||||||
"clash-verge-signal",
|
"clash-verge-signal",
|
||||||
|
"clash-verge-types",
|
||||||
"clash_verge_logger",
|
"clash_verge_logger",
|
||||||
"clash_verge_service_ipc",
|
"clash_verge_service_ipc",
|
||||||
"compact_str",
|
"compact_str",
|
||||||
@@ -1206,6 +1207,15 @@ dependencies = [
|
|||||||
"windows-sys 0.61.2",
|
"windows-sys 0.61.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clash-verge-types"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
"serde_yaml_ng",
|
||||||
|
"smartstring",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clash_verge_logger"
|
name = "clash_verge_logger"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
|
|||||||
16
Cargo.toml
16
Cargo.toml
@@ -5,6 +5,7 @@ members = [
|
|||||||
"crates/clash-verge-logging",
|
"crates/clash-verge-logging",
|
||||||
"crates/clash-verge-signal",
|
"crates/clash-verge-signal",
|
||||||
"crates/tauri-plugin-clash-verge-sysinfo",
|
"crates/tauri-plugin-clash-verge-sysinfo",
|
||||||
|
"crates/clash-verge-types",
|
||||||
]
|
]
|
||||||
resolver = "2"
|
resolver = "2"
|
||||||
|
|
||||||
@@ -45,12 +46,11 @@ strip = false
|
|||||||
clash-verge-draft = { path = "crates/clash-verge-draft" }
|
clash-verge-draft = { path = "crates/clash-verge-draft" }
|
||||||
clash-verge-logging = { path = "crates/clash-verge-logging" }
|
clash-verge-logging = { path = "crates/clash-verge-logging" }
|
||||||
clash-verge-signal = { path = "crates/clash-verge-signal" }
|
clash-verge-signal = { path = "crates/clash-verge-signal" }
|
||||||
|
clash-verge-types = { path = "crates/clash-verge-types" }
|
||||||
tauri-plugin-clash-verge-sysinfo = { path = "crates/tauri-plugin-clash-verge-sysinfo" }
|
tauri-plugin-clash-verge-sysinfo = { path = "crates/tauri-plugin-clash-verge-sysinfo" }
|
||||||
|
|
||||||
tauri = { version = "2.9.3" }
|
tauri = { version = "2.9.3" }
|
||||||
parking_lot = { version = "0.12.5", features = [
|
parking_lot = { version = "0.12.5", features = ["hardware-lock-elision"] }
|
||||||
"hardware-lock-elision",
|
|
||||||
"send_guard",
|
|
||||||
] }
|
|
||||||
anyhow = "1.0.100"
|
anyhow = "1.0.100"
|
||||||
criterion = { version = "0.7.0", features = ["async_tokio"] }
|
criterion = { version = "0.7.0", features = ["async_tokio"] }
|
||||||
tokio = { version = "1.48.0", features = [
|
tokio = { version = "1.48.0", features = [
|
||||||
@@ -59,10 +59,16 @@ tokio = { version = "1.48.0", features = [
|
|||||||
"time",
|
"time",
|
||||||
"sync",
|
"sync",
|
||||||
] }
|
] }
|
||||||
compact_str = { version = "0.9.0", features = ["serde"] }
|
|
||||||
flexi_logger = "0.31.7"
|
flexi_logger = "0.31.7"
|
||||||
log = "0.4.28"
|
log = "0.4.28"
|
||||||
|
|
||||||
|
smartstring = { version = "1.0.1" }
|
||||||
|
compact_str = { version = "0.9.0", features = ["serde"] }
|
||||||
|
|
||||||
|
serde = { version = "1.0.228" }
|
||||||
|
serde_json = { version = "1.0.145" }
|
||||||
|
serde_yaml_ng = { version = "0.10.0" }
|
||||||
|
|
||||||
# *** For Windows platform only ***
|
# *** For Windows platform only ***
|
||||||
deelevate = "0.2.0"
|
deelevate = "0.2.0"
|
||||||
# *********************************
|
# *********************************
|
||||||
|
|||||||
13
crates/clash-verge-types/Cargo.toml
Normal file
13
crates/clash-verge-types/Cargo.toml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
[package]
|
||||||
|
name = "clash-verge-types"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition.workspace = true
|
||||||
|
rust-version.workspace = true
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
serde = { workspace = true }
|
||||||
|
serde_yaml_ng = { workspace = true }
|
||||||
|
smartstring = { workspace = true }
|
||||||
|
|
||||||
|
[lints]
|
||||||
|
workspace = true
|
||||||
1
crates/clash-verge-types/src/lib.rs
Normal file
1
crates/clash-verge-types/src/lib.rs
Normal file
@@ -0,0 +1 @@
|
|||||||
|
pub mod runtime;
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
use crate::enhance::field::use_keys;
|
|
||||||
use serde::{Deserialize, Serialize};
|
|
||||||
use serde_yaml_ng::{Mapping, Value};
|
use serde_yaml_ng::{Mapping, Value};
|
||||||
use smartstring::alias::String;
|
use smartstring::alias::String;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
#[derive(Default, Debug, Clone, Deserialize, Serialize)]
|
#[derive(Default, Clone)]
|
||||||
pub struct IRuntime {
|
pub struct IRuntime {
|
||||||
pub config: Option<Mapping>,
|
pub config: Option<Mapping>,
|
||||||
// 记录在订阅中(包括merge和script生成的)出现过的keys
|
// 记录在订阅中(包括merge和script生成的)出现过的keys
|
||||||
// 这些keys不一定都生效
|
// 这些keys不一定都生效
|
||||||
|
// TODO 或许我们可以用 hashset 来存储以提升查询效率
|
||||||
pub exists_keys: Vec<String>,
|
pub exists_keys: Vec<String>,
|
||||||
|
// TODO 或许可以用 FixMap 来存储以提升效率
|
||||||
pub chain_logs: HashMap<String, Vec<(String, String)>>,
|
pub chain_logs: HashMap<String, Vec<(String, String)>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,49 +49,7 @@ impl IRuntime {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//跟新链式代理配置文件
|
// 传入none 为删除
|
||||||
/// {
|
|
||||||
/// "proxies":[
|
|
||||||
/// {
|
|
||||||
/// name : 入口节点,
|
|
||||||
/// type: xxx
|
|
||||||
/// server: xxx
|
|
||||||
/// port: xxx
|
|
||||||
/// ports: xxx
|
|
||||||
/// password: xxx
|
|
||||||
/// skip-cert-verify: xxx,
|
|
||||||
/// },
|
|
||||||
/// {
|
|
||||||
/// name : hop_node_1_xxxx,
|
|
||||||
/// type: xxx
|
|
||||||
/// server: xxx
|
|
||||||
/// port: xxx
|
|
||||||
/// ports: xxx
|
|
||||||
/// password: xxx
|
|
||||||
/// skip-cert-verify: xxx,
|
|
||||||
/// dialer-proxy : "入口节点"
|
|
||||||
/// },
|
|
||||||
/// {
|
|
||||||
/// name : 出口节点,
|
|
||||||
/// type: xxx
|
|
||||||
/// server: xxx
|
|
||||||
/// port: xxx
|
|
||||||
/// ports: xxx
|
|
||||||
/// password: xxx
|
|
||||||
/// skip-cert-verify: xxx,
|
|
||||||
/// dialer-proxy : "hop_node_1_xxxx"
|
|
||||||
/// }
|
|
||||||
/// ],
|
|
||||||
/// "proxy-groups" : [
|
|
||||||
/// {
|
|
||||||
/// name : "proxy_chain",
|
|
||||||
/// type: "select",
|
|
||||||
/// proxies ["出口节点"]
|
|
||||||
/// }
|
|
||||||
/// ]
|
|
||||||
/// }
|
|
||||||
///
|
|
||||||
/// 传入none 为删除
|
|
||||||
pub fn update_proxy_chain_config(&mut self, proxy_chain_config: Option<Value>) {
|
pub fn update_proxy_chain_config(&mut self, proxy_chain_config: Option<Value>) {
|
||||||
if let Some(config) = self.config.as_mut() {
|
if let Some(config) = self.config.as_mut() {
|
||||||
if let Some(Value::Sequence(proxies)) = config.get_mut("proxies") {
|
if let Some(Value::Sequence(proxies)) = config.get_mut("proxies") {
|
||||||
@@ -121,3 +79,16 @@ impl IRuntime {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO 完整迁移 enhance 行为后移除
|
||||||
|
fn use_keys(config: &Mapping) -> Vec<String> {
|
||||||
|
config
|
||||||
|
.iter()
|
||||||
|
.filter_map(|(key, _)| key.as_str())
|
||||||
|
.map(|s: &str| {
|
||||||
|
let mut s: String = s.into();
|
||||||
|
s.make_ascii_lowercase();
|
||||||
|
s
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
@@ -33,6 +33,7 @@ tauri-build = { version = "2.5.2", features = [] }
|
|||||||
clash-verge-draft = { workspace = true }
|
clash-verge-draft = { workspace = true }
|
||||||
clash-verge-logging = { workspace = true }
|
clash-verge-logging = { workspace = true }
|
||||||
clash-verge-signal = { workspace = true }
|
clash-verge-signal = { workspace = true }
|
||||||
|
clash-verge-types = { workspace = true }
|
||||||
tauri-plugin-clash-verge-sysinfo = { workspace = true }
|
tauri-plugin-clash-verge-sysinfo = { workspace = true }
|
||||||
tauri = { workspace = true, features = [
|
tauri = { workspace = true, features = [
|
||||||
"protocol-asset",
|
"protocol-asset",
|
||||||
@@ -47,19 +48,20 @@ tokio = { workspace = true }
|
|||||||
compact_str = { workspace = true }
|
compact_str = { workspace = true }
|
||||||
flexi_logger = { workspace = true }
|
flexi_logger = { workspace = true }
|
||||||
log = { workspace = true }
|
log = { workspace = true }
|
||||||
|
serde = { workspace = true, features = ["derive"] }
|
||||||
|
serde_json = { workspace = true }
|
||||||
|
serde_yaml_ng = { workspace = true }
|
||||||
|
smartstring = { workspace = true, features = ["serde"] }
|
||||||
warp = { version = "0.4.2", features = ["server"] }
|
warp = { version = "0.4.2", features = ["server"] }
|
||||||
open = "5.3.3"
|
open = "5.3.3"
|
||||||
dunce = "1.0.5"
|
dunce = "1.0.5"
|
||||||
nanoid = "0.4"
|
nanoid = "0.4"
|
||||||
chrono = "0.4.42"
|
chrono = "0.4.42"
|
||||||
boa_engine = "0.21.0"
|
boa_engine = "0.21.0"
|
||||||
serde_json = "1.0.145"
|
|
||||||
serde_yaml_ng = "0.10.0"
|
|
||||||
once_cell = { version = "1.21.3", features = ["parking_lot"] }
|
once_cell = { version = "1.21.3", features = ["parking_lot"] }
|
||||||
port_scanner = "0.1.5"
|
port_scanner = "0.1.5"
|
||||||
delay_timer = "0.11.6"
|
delay_timer = "0.11.6"
|
||||||
percent-encoding = "2.3.2"
|
percent-encoding = "2.3.2"
|
||||||
serde = { version = "1.0.228", features = ["derive"] }
|
|
||||||
reqwest = { version = "0.12.24", features = ["json", "cookies"] }
|
reqwest = { version = "0.12.24", features = ["json", "cookies"] }
|
||||||
regex = "1.12.2"
|
regex = "1.12.2"
|
||||||
sysproxy = { git = "https://github.com/clash-verge-rev/sysproxy-rs", features = [
|
sysproxy = { git = "https://github.com/clash-verge-rev/sysproxy-rs", features = [
|
||||||
@@ -91,7 +93,6 @@ tauri-plugin-devtools = { version = "2.0.1" }
|
|||||||
tauri-plugin-mihomo = { git = "https://github.com/clash-verge-rev/tauri-plugin-mihomo" }
|
tauri-plugin-mihomo = { git = "https://github.com/clash-verge-rev/tauri-plugin-mihomo" }
|
||||||
clash_verge_logger = { git = "https://github.com/clash-verge-rev/clash-verge-logger" }
|
clash_verge_logger = { git = "https://github.com/clash-verge-rev/clash-verge-logger" }
|
||||||
async-trait = "0.1.89"
|
async-trait = "0.1.89"
|
||||||
smartstring = { version = "1.0.1", features = ["serde"] }
|
|
||||||
clash_verge_service_ipc = { version = "2.0.21", features = [
|
clash_verge_service_ipc = { version = "2.0.21", features = [
|
||||||
"client",
|
"client",
|
||||||
], git = "https://github.com/clash-verge-rev/clash-verge-service-ipc" }
|
], git = "https://github.com/clash-verge-rev/clash-verge-service-ipc" }
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use super::{IClashTemp, IProfiles, IRuntime, IVerge};
|
use super::{IClashTemp, IProfiles, IVerge};
|
||||||
use crate::{
|
use crate::{
|
||||||
cmd,
|
cmd,
|
||||||
config::{PrfItem, profiles_append_item_safe},
|
config::{PrfItem, profiles_append_item_safe},
|
||||||
@@ -11,6 +11,7 @@ use anyhow::{Result, anyhow};
|
|||||||
use backoff::{Error as BackoffError, ExponentialBackoff};
|
use backoff::{Error as BackoffError, ExponentialBackoff};
|
||||||
use clash_verge_draft::Draft;
|
use clash_verge_draft::Draft;
|
||||||
use clash_verge_logging::{Type, logging, logging_error};
|
use clash_verge_logging::{Type, logging, logging_error};
|
||||||
|
use clash_verge_types::runtime::IRuntime;
|
||||||
use smartstring::alias::String;
|
use smartstring::alias::String;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use tokio::sync::OnceCell;
|
use tokio::sync::OnceCell;
|
||||||
|
|||||||
@@ -4,10 +4,9 @@ mod config;
|
|||||||
mod encrypt;
|
mod encrypt;
|
||||||
mod prfitem;
|
mod prfitem;
|
||||||
pub mod profiles;
|
pub mod profiles;
|
||||||
mod runtime;
|
|
||||||
mod verge;
|
mod verge;
|
||||||
|
|
||||||
pub use self::{clash::*, config::*, encrypt::*, prfitem::*, profiles::*, runtime::*, verge::*};
|
pub use self::{clash::*, config::*, encrypt::*, prfitem::*, profiles::*, verge::*};
|
||||||
|
|
||||||
pub const DEFAULT_PAC: &str = r#"function FindProxyForURL(url, host) {
|
pub const DEFAULT_PAC: &str = r#"function FindProxyForURL(url, host) {
|
||||||
return "PROXY 127.0.0.1:%mixed-port%; SOCKS5 127.0.0.1:%mixed-port%; DIRECT;";
|
return "PROXY 127.0.0.1:%mixed-port%; SOCKS5 127.0.0.1:%mixed-port%; DIRECT;";
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
use super::CoreManager;
|
use super::CoreManager;
|
||||||
use crate::{
|
use crate::{
|
||||||
config::{Config, ConfigType, IRuntime},
|
config::{Config, ConfigType},
|
||||||
constants::timing,
|
constants::timing,
|
||||||
core::{handle, validate::CoreConfigValidator},
|
core::{handle, validate::CoreConfigValidator},
|
||||||
utils::{dirs, help},
|
utils::{dirs, help},
|
||||||
};
|
};
|
||||||
use anyhow::{Result, anyhow};
|
use anyhow::{Result, anyhow};
|
||||||
use clash_verge_logging::{Type, logging};
|
use clash_verge_logging::{Type, logging};
|
||||||
|
use clash_verge_types::runtime::IRuntime;
|
||||||
use smartstring::alias::String;
|
use smartstring::alias::String;
|
||||||
use std::{path::PathBuf, time::Instant};
|
use std::{path::PathBuf, time::Instant};
|
||||||
use tauri_plugin_mihomo::Error as MihomoError;
|
use tauri_plugin_mihomo::Error as MihomoError;
|
||||||
|
|||||||
Reference in New Issue
Block a user