devalang_core/config/
settings.rs1use serde::{Deserialize, Serialize};
2use std::{any::Any, io::Write};
3
4#[derive(Serialize, Deserialize, Default, Debug)]
5pub struct UserSettings {
6 pub session: String,
7 pub telemetry: TelemetrySettings,
8}
9
10#[derive(Serialize, Deserialize, Default, Debug)]
11pub struct TelemetrySettings {
12 pub uuid: String,
13 pub stats: bool,
14 pub level: String,
15 pub enabled: bool,
16}
17
18pub fn get_home_dir() -> std::path::PathBuf {
19 dirs::home_dir().unwrap_or_default()
20}
21
22pub fn get_devalang_homedir() -> std::path::PathBuf {
23 get_home_dir().join(".devalang")
24}
25
26pub fn get_default_user_config() -> UserSettings {
27 UserSettings {
28 session: "".into(),
29 telemetry: TelemetrySettings {
30 uuid: uuid::Uuid::new_v4().to_string(),
31 enabled: true,
32 level: "basic".into(),
33 stats: true,
34 },
35 }
36}
37
38pub fn get_user_config() -> Option<UserSettings> {
39 let config_path = get_devalang_homedir().join("config.json");
40 if config_path.try_exists().is_ok() {
41 let file = std::fs::File::open(config_path).ok()?;
42 let settings = serde_json::from_reader(file).ok()?;
43 Some(settings)
44 } else {
45 None
46 }
47}
48
49pub fn write_user_config_file() {
50 let settings = get_user_config().unwrap_or(get_default_user_config());
51
52 let config_path = get_devalang_homedir().join("config.json");
53 let mut file = std::fs::File::create(config_path).unwrap();
54 let config_json = serde_json::to_string(&settings).unwrap();
55
56 file.write_all(config_json.as_bytes()).unwrap();
57}
58
59pub fn set_user_config_bool(key: &str, value: bool) {
60 let mut settings = get_user_config().unwrap_or_default();
61
62 match key {
63 "telemetry" => {
64 settings.telemetry.enabled = value;
65 }
66 _ => {}
67 }
68
69 let config_path = get_devalang_homedir().join("config.json");
70 let config_json = serde_json::to_string(&settings).unwrap();
71 let mut file = std::fs::File::create(config_path).unwrap();
72
73 file.write_all(config_json.as_bytes()).unwrap();
74}
75
76pub fn set_user_config_string(key: &str, value: String) {
77 let mut settings = get_user_config().unwrap_or_default();
78
79 match key {
80 "session" => {
81 settings.session = value;
82 }
83 _ => {}
84 }
85
86 let config_path = get_devalang_homedir().join("config.json");
87 let config_json = serde_json::to_string(&settings).unwrap();
88 let mut file = std::fs::File::create(config_path).unwrap();
89
90 file.write_all(config_json.as_bytes()).unwrap();
91}