hex_patch/app/settings/
app_settings.rs1use 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}