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}