hex_patch/app/settings/
app_settings.rs

1use mlua::UserDataRegistry;
2use serde::{Deserialize, Serialize};
3
4use super::{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}
14
15impl AppSettings {
16    pub fn register_userdata(data: &mut UserDataRegistry<Settings>) {
17        mlua::UserDataFields::add_field_method_get(data, "app_history_limit", |_lua, settings| {
18            Ok(settings.app.history_limit)
19        });
20        mlua::UserDataFields::add_field_method_set(
21            data,
22            "app_history_limit",
23            |_lua, settings, value| {
24                settings.app.history_limit = value;
25                Ok(())
26            },
27        );
28        mlua::UserDataFields::add_field_method_get(data, "app_log_limit", |_lua, settings| {
29            Ok(settings.app.log_limit)
30        });
31        mlua::UserDataFields::add_field_method_set(
32            data,
33            "app_log_limit",
34            |_lua, settings, value| {
35                settings.app.log_limit = value;
36                Ok(())
37            },
38        );
39    }
40}
41
42impl Default for AppSettings {
43    fn default() -> Self {
44        Self {
45            history_limit: 1024,
46            log_limit: 1024,
47            log_level: Verbosity::default(),
48            theme: ThemePreference::default(),
49        }
50    }
51}