From 010c037ddea67c79d5e3c7471d69058bac642c13 Mon Sep 17 00:00:00 2001 From: Tunglies <77394545+Tunglies@users.noreply.github.com> Date: Tue, 27 Oct 2026 06:55:10 +0800 Subject: [PATCH] refactor: replace smartstring with tristr across the codebase Co-authored-by: GLM-5.3 --- src-tauri/src/config/verge.rs | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src-tauri/src/config/verge.rs b/src-tauri/src/config/verge.rs index 3b469a1a9..d249b56f1 100644 --- a/src-tauri/src/config/verge.rs +++ b/src-tauri/src/config/verge.rs @@ -15,19 +15,26 @@ use tristr::alias::String; #[serde(default)] pub struct IVerge { /// silent | error | warn | info | debug | trace + #[specta(type = Option)] pub app_log_level: Option, /// Maximum app log size in KiB. pub app_log_max_size: Option, pub app_log_max_count: Option, + #[specta(type = Option)] pub language: Option, /// `light` or `dark` or `system` + #[specta(type = Option)] pub theme_mode: Option, + #[specta(type = Option)] pub tray_event: Option, + #[specta(type = Option)] pub env_type: Option, + #[specta(type = Option)] pub start_page: Option, + #[specta(type = Option)] pub startup_script: Option, pub traffic_graph: Option, @@ -45,18 +52,23 @@ pub struct IVerge { #[cfg(target_os = "macos")] #[serde(skip_serializing_if = "Option::is_none")] + #[specta(type = Option)] pub tray_icon: Option, #[serde(skip_serializing_if = "Option::is_none")] + #[specta(type = Option)] pub menu_icon: Option, #[serde(skip_serializing_if = "Option::is_none")] + #[specta(type = Option>)] pub menu_order: Option>, #[serde(skip_serializing_if = "Option::is_none")] + #[specta(type = Option)] pub proxy_group_tools_position: Option, #[serde(skip_serializing_if = "Option::is_none")] + #[specta(type = Option)] pub notice_position: Option, pub collapse_navbar: Option, @@ -81,25 +93,32 @@ pub struct IVerge { pub enable_dns_settings: Option, #[serde(default, skip_serializing_if = "std::collections::BTreeMap::is_empty")] + #[specta(type = std::collections::BTreeMap)] pub profile_dns_settings: std::collections::BTreeMap, pub use_default_bypass: Option, + #[specta(type = Option)] pub system_proxy_bypass: Option, pub proxy_guard_duration: Option, pub proxy_auto_config: Option, + #[specta(type = Option)] pub pac_file_content: Option, + #[specta(type = Option)] pub proxy_host: Option, pub theme_setting: Option, + #[specta(type = Option>)] pub web_ui_list: Option>, #[serde(skip_serializing_if = "Option::is_none")] + #[specta(type = Option)] pub clash_core: Option, /// format: {func},{key} #[serde(skip_serializing_if = "Option::is_none")] + #[specta(type = Option>)] pub hotkeys: Option>, pub enable_global_hotkey: Option, @@ -110,6 +129,7 @@ pub struct IVerge { pub auto_close_connection: Option, pub auto_check_update: Option, + #[specta(type = Option)] pub default_latency_test: Option, pub default_latency_timeout: Option, @@ -164,6 +184,7 @@ pub struct IVerge { skip_serializing_if = "Option::is_none", default )] + #[specta(type = Option)] pub webdav_url: Option, #[serde( @@ -172,6 +193,7 @@ pub struct IVerge { skip_serializing_if = "Option::is_none", default )] + #[specta(type = Option)] pub webdav_username: Option, #[serde( @@ -180,12 +202,14 @@ pub struct IVerge { skip_serializing_if = "Option::is_none", default )] + #[specta(type = Option)] pub webdav_password: Option, #[cfg(target_os = "macos")] pub enable_tray_speed: Option, #[serde(skip_serializing_if = "Option::is_none")] + #[specta(type = Option)] pub tray_proxy_groups_display_mode: Option, pub tray_inline_outbound_modes: Option, @@ -205,24 +229,38 @@ pub struct IVerge { #[derive(Default, Debug, Clone, Deserialize, Serialize, specta::Type)] #[serde(default)] pub struct IVergeTestItem { + #[specta(type = Option)] pub uid: Option, + #[specta(type = Option)] pub name: Option, + #[specta(type = Option)] pub icon: Option, + #[specta(type = Option)] pub url: Option, } #[derive(Default, Debug, Clone, Deserialize, Serialize, specta::Type)] #[serde(default)] pub struct IVergeTheme { + #[specta(type = Option)] pub primary_color: Option, + #[specta(type = Option)] pub secondary_color: Option, + #[specta(type = Option)] pub primary_text: Option, + #[specta(type = Option)] pub secondary_text: Option, + #[specta(type = Option)] pub info_color: Option, + #[specta(type = Option)] pub error_color: Option, + #[specta(type = Option)] pub warning_color: Option, + #[specta(type = Option)] pub success_color: Option, + #[specta(type = Option)] pub font_family: Option, + #[specta(type = Option)] pub css_injection: Option, }