simple_game_utils/prefs/
app_prefs.rs1use crate::prefs::*;
2use log::error;
3use serde::Serialize;
4
5const FILE_NAME: &str = "app.prefs";
6const KEY: &str = "settings";
7
8#[derive(Debug, Clone)]
27pub struct AppPrefs<T: Sized + Clone + Serialize + DeserializeOwned> {
28 prefs: Preferences<T>,
29 pub data: T,
30}
31
32impl<T: Sized + Clone + Serialize + DeserializeOwned> AppPrefs<T> {
33 pub fn new(
34 qualifier: &str,
35 organization: &str,
36 application: &str,
37 default: fn() -> T,
38 ) -> Result<Self, GameUtilError> {
39 let mut prefs: Preferences<T> = Preferences::new(
40 get_pref_dir(qualifier, organization, application)?,
41 FILE_NAME,
42 );
43 if let Err(e) = prefs.load() {
44 error!("Unable to restore app prefs: {e:?}");
45 }
46 let data = if let Some(data) = prefs.get(KEY) {
47 data.clone()
48 } else {
49 default()
50 };
51 Ok(AppPrefs { prefs, data })
52 }
53}
54
55impl<T: Sized + Clone + Serialize + DeserializeOwned> AppPrefs<T> {
56 pub fn save(&mut self) {
57 self.prefs.set(KEY, self.data.clone());
58 if let Err(e) = self.prefs.save() {
59 error!("Unable to save app prefs: {e:?}");
60 }
61 }
62
63 pub fn reload(&mut self) {
64 if let Err(e) = self.prefs.load() {
65 error!("Unable to reload app prefs: {e:?}");
66 }
67 if let Some(data) = self.prefs.get(KEY) {
68 self.data = data.clone();
69 }
70 }
71}