leetcode_tui_config/utils.rs
1use crate::constants::*;
2use std::path::PathBuf;
3
4use directories::ProjectDirs;
5
6fn project_directory() -> Option<ProjectDirs> {
7 ProjectDirs::from("com", "akarsh", "leetui")
8}
9
10/// Returns the data directory path
11/// Examples:
12/// - Windows: C:\Users\<username>\AppData\Local\leetcode-tui
13/// - macOS: /Users/<username>/Library/Application Support/leetcode-tui
14/// - Linux: /home/<username>/.local/share/leetcode-tui
15pub fn get_data_dir() -> PathBuf {
16 project_directory()
17 .map(|proj| proj.data_local_dir().to_path_buf())
18 .unwrap_or_else(|| PathBuf::from(".leetcode-tui"))
19}
20
21/// Returns the config directory path
22/// Examples:
23/// - Windows: C:\Users\<username>\AppData\Roaming\leetcode-tui
24/// - macOS: /Users/<username>/Library/Application Support/leetcode-tui
25/// - Linux: /home/<username>/.config/leetcode-tui
26pub fn get_config_dir() -> PathBuf {
27 project_directory()
28 .map(|proj| proj.config_dir().to_path_buf())
29 .unwrap_or_else(|| PathBuf::from(".leetcode-tui"))
30}
31
32/// Returns the config file path
33/// Examples:
34/// - Windows: C:\Users\<username>\AppData\Roaming\leetcode-tui\config.toml
35/// - macOS: /Users/<username>/Library/Application Support/leetcode-tui/config.toml
36/// - Linux: /home/<username>/.config/leetcode-tui/config.toml
37pub fn get_config_file_path() -> PathBuf {
38 get_config_dir().join("config.toml")
39}
40
41/// Returns the solutions directory path
42/// Examples:
43/// - Windows: C:\Users\<username>\AppData\Local\leetcode-tui\solutions
44/// - macOS: /Users/<username>/Library/Application Support/leetcode-tui/solutions
45/// - Linux: /home/<username>/.local/share/leetcode-tui/solutions
46pub(crate) fn get_solutions_dir_path() -> PathBuf {
47 get_data_dir().join("solutions")
48}
49
50/// Returns the default database file path
51/// Examples:
52/// - Windows: C:\Users\<username>\AppData\Local\leetcode-tui\questions.db
53/// - macOS: /Users/<username>/Library/Application Support/leetcode-tui/questions.db
54/// - Linux: /home/<username>/.local/share/leetcode-tui/questions.db
55pub(crate) fn get_default_database_file_path() -> PathBuf {
56 get_data_dir().join("questions.db")
57}
58
59pub fn version() -> String {
60 let author = clap::crate_authors!();
61 let commit_hash = GIT_COMMIT_HASH.get().unwrap().clone();
62 let config_dir_path = get_config_dir().display().to_string();
63 let data_dir_path = get_data_dir().display().to_string();
64
65 format!(
66 "\
67{commit_hash}
68
69Authors: {author}
70
71Config directory: {config_dir_path}
72Data directory: {data_dir_path}"
73 )
74}