lcode_config/config/
mod.rs1pub mod read_config;
2pub mod user_nested;
3mod user_serializes;
4
5use std::{collections::VecDeque, path::PathBuf};
6
7use decrypt_cookies::browser::cookies::LeetCodeCookies;
8use serde::{Deserialize, Serialize};
9use user_nested::*;
10
11use self::user_serializes::*;
12use crate::{global, keymap::TuiKeyMap};
13
14#[derive(Clone)]
16#[derive(Debug)]
17#[derive(PartialEq, Eq)]
18#[derive(Serialize, Deserialize)]
19#[derive(Default)]
20pub struct LcodeConfig {
21 #[serde(skip)]
22 pub urls: Urls,
23 #[serde(default)]
24 pub config: Config,
25 #[serde(default)]
26 pub cookies: LeetCodeCookies,
27 #[serde(default)]
28 pub langs: SupportLang,
29 #[serde(default)]
30 pub keymap: TuiKeyMap,
31}
32
33#[derive(Clone)]
34#[derive(Debug)]
35#[derive(PartialEq, Eq)]
36#[derive(Serialize, Deserialize)]
37pub struct Config {
38 #[serde(default)]
39 pub translate: bool,
40 #[serde(default, with = "user_serializes")]
41 pub url_suffix: Suffix,
42 #[serde(default)]
43 pub column: usize,
44 #[serde(default)]
45 pub num_sublist: u32,
46 #[serde(default)]
47 pub page_size: usize,
48 #[serde(default = "default_editor")]
49 pub editor: VecDeque<String>,
50 #[serde(default = "lang_default")]
51 pub lang: String,
52 #[serde(default = "default_code_dir")]
53 pub code_dir: PathBuf,
54 #[serde(default)]
55 pub browser: String,
56 #[serde(default = "default_true")]
57 pub cargo_integr: bool,
58 #[serde(default)]
59 pub dir_with_frontend_id: bool,
61 #[serde(default)]
62 pub show_avatar: bool,
63}
64
65impl Config {
66 pub fn new(suffix: Suffix) -> Self {
67 let (url_suffix, translate) = match suffix {
68 Suffix::Cn => (Suffix::Cn, true),
69 Suffix::Com => (Suffix::Com, false),
70 };
71 Self {
72 translate,
73 url_suffix,
74 ..Default::default()
75 }
76 }
77}
78impl Default for Config {
79 fn default() -> Self {
80 Self {
81 translate: false,
82 column: 4,
83 num_sublist: 16,
84 page_size: 25,
85 url_suffix: Suffix::default(),
86 editor: default_editor(),
87 lang: "rust".to_owned(),
88 code_dir: default_code_dir(),
89 browser: String::new(),
90 cargo_integr: true,
91 dir_with_frontend_id: false,
92 show_avatar: false,
93 }
94 }
95}
96
97impl LcodeConfig {
98 pub fn new(tongue: Suffix) -> Self {
100 let config = Config::new(tongue);
101 Self { config, ..Default::default() }
102 }
103
104 pub fn get_lang_info(&self) -> (String, String, String, String) {
106 macro_rules! return_info_macro {
107 ($($struct_name:ident),*) => {
108 match self.config.lang.as_str() {
109 $(
110 stringify!($struct_name) => self.langs.$struct_name.return_info(),
111 )*
112 _ => self.langs.rust.return_info(),
113 }
114 };
115 }
116
117 return_info_macro!(
118 rust, bash, c, cpp, csharp, golang, java, javascript, kotlin, mysql, php, python,
119 python3, ruby, scala, swift, typescript, racket, erlang, elixir, dart
120 )
121 }
122
123 pub fn get_suffix(&self) -> &str {
125 let sp_lang = &global::G_SUPPORT_LANGS;
126 sp_lang
127 .get(self.config.lang.as_str())
128 .copied()
129 .unwrap_or_default()
130 }
131}