hex_patch/app/settings/
app_settings.rs

1use mlua::UserDataRegistry;
2use serde::{Deserialize, Serialize};
3
4use super::{locale::Locale, theme_preference::ThemePreference, verbosity::Verbosity, Settings};
5
6#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
7#[serde(default)]
8pub struct AppSettings {
9    pub history_limit: usize,
10    pub log_limit: usize,
11    pub log_level: Verbosity,
12    pub theme: ThemePreference,
13    pub locale: Locale,
14}
15
16impl AppSettings {
17    pub fn register_userdata(data: &mut UserDataRegistry<Settings>) {
18        mlua::UserDataFields::add_field_method_get(data, "app_history_limit", |_lua, settings| {
19            Ok(settings.app.history_limit)
20        });
21        mlua::UserDataFields::add_field_method_set(
22            data,
23            "app_history_limit",
24            |_lua, settings, value| {
25                settings.app.history_limit = value;
26                Ok(())
27            },
28        );
29        mlua::UserDataFields::add_field_method_get(data, "app_log_limit", |_lua, settings| {
30            Ok(settings.app.log_limit)
31        });
32        mlua::UserDataFields::add_field_method_set(
33            data,
34            "app_log_limit",
35            |_lua, settings, value| {
36                settings.app.log_limit = value;
37                Ok(())
38            },
39        );
40    }
41}
42
43impl Default for AppSettings {
44    fn default() -> Self {
45        Self {
46            history_limit: 1024,
47            log_limit: 1024,
48            log_level: Verbosity::default(),
49            theme: ThemePreference::default(),
50            locale: Locale::default(),
51        }
52    }
53}