Introduce AppError enum to replace Result<T, String> pattern across the codebase, improving error context preservation and type safety. ## Changes ### Core Infrastructure - Add src/error.rs with AppError enum using thiserror - Add thiserror dependency to Cargo.toml - Implement helper functions: io(), json(), toml() for ergonomic error creation - Implement From<PoisonError> for automatic lock error conversion - Implement From<AppError> for String to maintain Tauri command compatibility ### Module Migrations (60% complete) - config.rs: Full migration to AppError - read_json_file, write_json_file, atomic_write - archive_file, copy_file, delete_file - claude_mcp.rs: Full migration to AppError - get_mcp_status, read_mcp_json, upsert_mcp_server - delete_mcp_server, validate_command_in_path - set_mcp_servers_map - codex_config.rs: Full migration to AppError - write_codex_live_atomic with rollback support - read_and_validate_codex_config_text - validate_config_toml - app_config.rs: Partial migration - MultiAppConfig::load, MultiAppConfig::save - store.rs: Partial migration - AppState::save now returns Result<(), AppError> - commands.rs: Minimal changes - Use .map_err(Into::into) for compatibility - mcp.rs: Minimal changes - sync_enabled_to_claude uses Into::into conversion ### Documentation - Add docs/BACKEND_REFACTOR_PLAN.md with detailed refactoring roadmap ## Benefits - Type-safe error handling with preserved error chains - Better error messages with file paths and context - Reduced boilerplate code (118 Result<T, String> instances to migrate) - Automatic error conversion for seamless integration ## Testing - All existing tests pass (4/4) - Compilation successful with no warnings - Build time: 0.61s (no performance regression) ## Remaining Work - claude_plugin.rs (7 functions) - migration.rs, import_export.rs - Add unit tests for error.rs - Complete commands.rs migration after dependent modules Co-authored-by: Claude <claude@anthropic.com>
55 lines
1.5 KiB
TOML
55 lines
1.5 KiB
TOML
[package]
|
|
name = "cc-switch"
|
|
version = "3.5.1"
|
|
description = "Claude Code & Codex 供应商配置管理工具"
|
|
authors = ["Jason Young"]
|
|
license = "MIT"
|
|
repository = "https://github.com/farion1231/cc-switch"
|
|
edition = "2021"
|
|
rust-version = "1.85.0"
|
|
|
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
|
|
[lib]
|
|
name = "cc_switch_lib"
|
|
crate-type = ["staticlib", "cdylib", "rlib"]
|
|
|
|
[build-dependencies]
|
|
tauri-build = { version = "2.4.0", features = [] }
|
|
|
|
[dependencies]
|
|
serde_json = "1.0"
|
|
serde = { version = "1.0", features = ["derive"] }
|
|
log = "0.4"
|
|
chrono = "0.4"
|
|
tauri = { version = "2.8.2", features = ["tray-icon"] }
|
|
tauri-plugin-log = "2"
|
|
tauri-plugin-opener = "2"
|
|
tauri-plugin-process = "2"
|
|
tauri-plugin-updater = "2"
|
|
tauri-plugin-dialog = "2"
|
|
tauri-plugin-store = "2"
|
|
dirs = "5.0"
|
|
toml = "0.8"
|
|
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "json"] }
|
|
tokio = { version = "1", features = ["macros", "rt-multi-thread", "time"] }
|
|
futures = "0.3"
|
|
regex = "1.10"
|
|
rquickjs = { version = "0.8", features = ["array-buffer", "classes"] }
|
|
thiserror = "1.0"
|
|
|
|
[target.'cfg(any(target_os = "macos", target_os = "windows", target_os = "linux"))'.dependencies]
|
|
tauri-plugin-single-instance = "2"
|
|
|
|
[target.'cfg(target_os = "macos")'.dependencies]
|
|
objc2 = "0.5"
|
|
objc2-app-kit = { version = "0.2", features = ["NSColor"] }
|
|
|
|
# Optimize release binary size to help reduce AppImage footprint
|
|
[profile.release]
|
|
codegen-units = 1
|
|
lto = "thin"
|
|
opt-level = "s"
|
|
panic = "abort"
|
|
strip = "symbols"
|