feat: config functions into impl methods

This commit is contained in:
Gabriele Musco 2023-06-20 22:08:57 +02:00
parent 65039c36dd
commit b938230922
No known key found for this signature in database
GPG key ID: 1068D795C80E51DE
2 changed files with 41 additions and 39 deletions

View file

@ -12,6 +12,16 @@ pub struct Config {
pub debug_view_enabled: bool,
}
impl Default for Config {
fn default() -> Self {
Config {
// TODO: handle first start with no profile selected
selected_profile_name: "".to_string(),
debug_view_enabled: false,
}
}
}
impl Config {
pub fn get_selected_profile(&self, profiles: &Vec<Profile>) -> Profile {
match profiles.iter().find(|p| {p.name == self.selected_profile_name}) {
@ -19,58 +29,50 @@ impl Config {
None => profiles.get(0).expect_dialog("No profiles found").clone(),
}
}
}
fn config_file_path() -> String {
format!(
"{config}/{name}.json",
config = get_config_dir(),
name = CMD_NAME
)
}
fn default_config() -> Config {
Config {
// TODO: handle first start with no profile selected
selected_profile_name: "".to_string(),
debug_view_enabled: false,
pub fn config_file_path() -> String {
format!(
"{config}/{name}.json",
config = get_config_dir(),
name = CMD_NAME
)
}
}
fn get_config_from_path(path_s: String) -> Config {
match File::open(path_s) {
Ok(file) => {
let reader = BufReader::new(file);
match serde_json::from_reader(reader) {
Ok(config) => config,
Err(_) => default_config(),
fn from_path(path_s: String) -> Self {
match File::open(path_s) {
Ok(file) => {
let reader = BufReader::new(file);
match serde_json::from_reader(reader) {
Ok(config) => config,
Err(_) => Self::default(),
}
}
Err(_) => Self::default(),
}
Err(_) => default_config(),
}
}
pub fn get_config() -> Config {
get_config_from_path(config_file_path())
}
fn save_to_path(&self, path_s: &String) -> Result<(), serde_json::Error> {
let writer = get_writer(path_s);
serde_json::to_writer_pretty(writer, self)
}
fn save_config_to_path(config: &Config, path_s: &String) -> Result<(), serde_json::Error> {
let writer = get_writer(path_s);
serde_json::to_writer_pretty(writer, config)
}
pub fn save(&self) {
self.save_to_path(&Self::config_file_path()).expect_dialog("Failed to save config");
}
pub fn save_config(config: &Config) {
save_config_to_path(config, &config_file_path()).expect_dialog("Failed to save config");
pub fn get_config() -> Self {
Self::from_path(Self::config_file_path())
}
}
#[cfg(test)]
mod tests {
use super::get_config_from_path;
use crate::config::Config;
#[test]
fn will_load_default_if_config_does_not_exist() {
assert_eq!(
get_config_from_path("/non/existing/file.json".into()).debug_view_enabled,
Config::from_path("/non/existing/file.json".into()).debug_view_enabled,
false
)
}

View file

@ -8,7 +8,7 @@ use crate::builders::build_libsurvive::get_build_libsurvive_runner;
use crate::builders::build_monado::get_build_monado_runner;
use crate::builders::build_opencomposite::get_build_opencomposite_runner;
use crate::builders::build_wivrn::get_build_wivrn_runner;
use crate::config::{get_config, save_config, Config};
use crate::config::Config;
use crate::constants::APP_NAME;
use crate::dependencies::basalt_deps::get_missing_basalt_deps;
use crate::dependencies::libsurvive_deps::get_missing_libsurvive_deps;
@ -211,7 +211,7 @@ impl SimpleComponent for App {
Msg::EnableDebugViewChanged(val) => {
self.set_enable_debug_view(val);
self.config.debug_view_enabled = val;
save_config(&self.config);
self.config.save();
self.debug_view
.sender()
.emit(DebugViewMsg::EnableDebugViewChanged(val));
@ -328,7 +328,7 @@ impl SimpleComponent for App {
return;
}
self.config.selected_profile_name = prof_name;
save_config(&self.config);
self.config.save();
let profile = self.get_selected_profile();
self.main_view
.sender()
@ -362,7 +362,7 @@ impl SimpleComponent for App {
root: &Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
let config = get_config();
let config = Config::get_config();
let profiles = vec![
valve_index_profile(),
system_valve_index_profile(),