diff --git a/Cargo.toml b/Cargo.toml index 083be23..2e8b161 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -147,7 +147,7 @@ bool_to_int_with_if = "warn" ### restriction group unwrap_used = "warn" -unwrap_in_result = "warn" +# unwrap_in_result = "warn" semicolon_outside_block = "warn" verbose_file_reads = "warn" try_err = "warn" diff --git a/crates/lcode-config/src/config/mod.rs b/crates/lcode-config/src/config/mod.rs index b0a4fa1..7366e40 100644 --- a/crates/lcode-config/src/config/mod.rs +++ b/crates/lcode-config/src/config/mod.rs @@ -17,7 +17,7 @@ use crate::{global, keymap::TuiKeyMap}; #[derive(PartialEq, Eq)] #[derive(Serialize, Deserialize)] #[derive(Default)] -pub struct User { +pub struct LcodeConfig { #[serde(skip)] pub urls: Urls, #[serde(default)] @@ -90,7 +90,7 @@ impl Default for Config { } } -impl User { +impl LcodeConfig { /// "cn" "en" pub fn new(tongue: Suffix) -> Self { let config = Config::new(tongue); diff --git a/crates/lcode-config/src/config/read_config.rs b/crates/lcode-config/src/config/read_config.rs index a4c4310..84c9d51 100644 --- a/crates/lcode-config/src/config/read_config.rs +++ b/crates/lcode-config/src/config/read_config.rs @@ -1,20 +1,20 @@ use std::fs::{self, write, OpenOptions}; use miette::{Context, IntoDiagnostic, Result}; -use tracing::{instrument, warn}; -use super::{global::*, user_nested::Suffix, User}; +use super::{global::*, user_nested::Suffix, LcodeConfig}; use crate::{ config::{user_nested::Urls, Config}, keymap::TuiKeyMap, }; -/// generate config -pub fn gen_config(suffix: Suffix) -> Result<()> { - let user = User::new(suffix); +impl LcodeConfig { + /// generate config + pub fn gen_config(suffix: Suffix) -> Result<()> { + let user = Self::new(suffix); - /// the `$ident` need `global_$ident_path` and `user.$ident` - macro_rules! the_configs { + /// the `$ident` need `global_$ident_path` and `user.$ident` + macro_rules! the_configs { ($($conf:ident), *) => { paste::paste!{ $( @@ -31,60 +31,60 @@ pub fn gen_config(suffix: Suffix) -> Result<()> { } }; } - the_configs!(config, cookies, langs, keymap); + the_configs!(config, cookies, langs, keymap); - Ok(()) -} + Ok(()) + } -/// get the user's config -/// please first use `global_user_config()` for get config -#[instrument] -pub fn get_user_conf() -> Result { - let config = fs::read_to_string(&*G_CONFIG_PATH).unwrap_or_else(|err| { - tracing::info!("no config.toml: {err}"); - String::new() - }); - let mut config: Config = toml::from_str(&config).into_diagnostic()?; - let urls = Urls::new(config.url_suffix); + /// get the user's config + /// please first use `global_user_config()` for get config + pub fn get_user_conf() -> Result { + let config = fs::read_to_string(&*G_CONFIG_PATH).unwrap_or_else(|err| { + tracing::info!("no config.toml: {err}"); + String::new() + }); + let mut config: Config = toml::from_str(&config).into_diagnostic()?; + let urls = Urls::new(config.url_suffix); - if config.code_dir.starts_with("~") { - let mut path = config - .code_dir - .to_string_lossy() - .to_string(); - let path = path.split_off(2); - let mut code_dir = dirs::home_dir().expect("get home_dir failed"); - code_dir.push(path); - config.code_dir = code_dir; - } - let langs = fs::read_to_string(&*G_LANGS_PATH).unwrap_or_else(|err| { - tracing::info!("no langs.toml: {err}"); - String::new() - }); - let langs = toml::from_str(&langs).into_diagnostic()?; + if config.code_dir.starts_with("~") { + let mut path = config + .code_dir + .to_string_lossy() + .to_string(); + let path = path.split_off(2); + let mut code_dir = dirs::home_dir().expect("get home_dir failed"); + code_dir.push(path); + config.code_dir = code_dir; + } + let langs = fs::read_to_string(&*G_LANGS_PATH).unwrap_or_else(|err| { + tracing::info!("no langs.toml: {err}"); + String::new() + }); + let langs = toml::from_str(&langs).into_diagnostic()?; - let cookies = fs::read_to_string(&*G_COOKIES_PATH).unwrap_or_else(|err| { - tracing::info!("no config.toml: {err}"); - String::new() - }); - let cookies = toml::from_str(&cookies).unwrap_or_default(); + let cookies = fs::read_to_string(&*G_COOKIES_PATH).unwrap_or_else(|err| { + tracing::info!("no config.toml: {err}"); + String::new() + }); + let cookies = toml::from_str(&cookies).unwrap_or_default(); - let mut user = User { - urls, - config, - cookies, - langs, - keymap: TuiKeyMap::default(), - }; + let mut user = Self { + urls, + config, + cookies, + langs, + keymap: TuiKeyMap::default(), + }; - let key = fs::read_to_string(&*G_KEYMAP_PATH).unwrap_or_else(|err| { - tracing::info!("no keymap.toml: {err}"); - String::new() - }); - let key: TuiKeyMap = toml::from_str(&key) - .into_diagnostic() - .context("get keymap failed")?; - user.keymap.add_keymap(key.map_set); + let key = fs::read_to_string(&*G_KEYMAP_PATH).unwrap_or_else(|err| { + tracing::info!("no keymap.toml: {err}"); + String::new() + }); + let key: TuiKeyMap = toml::from_str(&key) + .into_diagnostic() + .context("get keymap failed")?; + user.keymap.add_keymap(key.map_set); - Ok(user) + Ok(user) + } } diff --git a/crates/lcode-config/src/global.rs b/crates/lcode-config/src/global.rs index 7e7b3ff..478f5a3 100644 --- a/crates/lcode-config/src/global.rs +++ b/crates/lcode-config/src/global.rs @@ -1,9 +1,6 @@ use std::{collections::HashMap, fs::create_dir_all, path::PathBuf, sync::LazyLock}; -use crate::{ - config::{read_config::get_user_conf, User}, - theme::Theme, -}; +use crate::{config::LcodeConfig, theme::Theme}; pub const G_APP_NAME: &str = "lcode"; pub const LOG_FILE: &str = "lcode.log"; @@ -27,8 +24,8 @@ pub static G_LOG_PATH: LazyLock = LazyLock::new(|| { }); /// global user config -pub static G_USER_CONFIG: LazyLock = - LazyLock::new(|| get_user_conf().expect("get G_USER_CONFIG falied")); +pub static G_USER_CONFIG: LazyLock = + LazyLock::new(|| LcodeConfig::get_user_conf().expect("get G_USER_CONFIG falied")); /// "~/.cache/lcode/leetcode-.db" pub static G_DATABASE_PATH: LazyLock = LazyLock::new(|| { diff --git a/crates/lcode-config/tests/serde_config_work.rs b/crates/lcode-config/tests/serde_config_work.rs index 9c78bba..f0bf9b6 100644 --- a/crates/lcode-config/tests/serde_config_work.rs +++ b/crates/lcode-config/tests/serde_config_work.rs @@ -1,12 +1,12 @@ use lcode_config::{ - config::{read_config, user_nested::Suffix}, + config::{user_nested::Suffix, LcodeConfig}, global::G_USER_CONFIG, }; use miette::Result; #[test] fn serde_conf_work() -> Result<()> { - read_config::gen_config(Suffix::Cn)?; + LcodeConfig::gen_config(Suffix::Cn)?; // let a = read_config::get_user_conf()?; // println!(r##"(| a |) -> {:#?}"##, a); // let a = &USER_CONFIG.get_suffix(); diff --git a/crates/lcode/src/cli.rs b/crates/lcode/src/cli.rs index c05cc58..06fe2b0 100644 --- a/crates/lcode/src/cli.rs +++ b/crates/lcode/src/cli.rs @@ -4,7 +4,7 @@ use clap::{Args, Command, CommandFactory, Parser, Subcommand}; use clap_complete::{generate, Generator, Shell}; use colored::Colorize; use lcode_config::{ - config::{read_config, user_nested::Suffix}, + config::{user_nested::Suffix, LcodeConfig}, global::G_DATABASE_PATH, }; use leetcode_api::{leetcode::IdSlug, render::Render}; @@ -168,7 +168,7 @@ pub async fn run() -> Result<()> { println!("{}", res); }, Commands::Gencon(args) => { - read_config::gen_config(if args.cn { Suffix::Cn } else { Suffix::Com })?; + LcodeConfig::gen_config(if args.cn { Suffix::Cn } else { Suffix::Com })?; }, Commands::Submit(args) => { let (_, res) = glob_leetcode()