summaryrefslogtreecommitdiffstats
path: root/src/config/clean/app/config.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/config/clean/app/config.rs')
-rw-r--r--src/config/clean/app/config.rs87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/config/clean/app/config.rs b/src/config/clean/app/config.rs
new file mode 100644
index 0000000..e112214
--- /dev/null
+++ b/src/config/clean/app/config.rs
@@ -0,0 +1,87 @@
+use std::collections::HashMap;
+
+use crate::{
+ config::{parse_config_or_default, raw::app::AppConfigRaw, TomlConfigFile},
+ error::JoshutoResult,
+};
+
+use super::{
+ display::DisplayOption, preview::PreviewOption, search::SearchOption, tab::TabOption,
+ DEFAULT_CONFIG_FILE_PATH,
+};
+
+#[derive(Debug, Clone)]
+pub struct AppConfig {
+ pub use_trash: bool,
+ pub xdg_open: bool,
+ pub xdg_open_fork: bool,
+ pub watch_files: bool,
+ pub cmd_aliases: HashMap<String, String>,
+ pub _display_options: DisplayOption,
+ pub _preview_options: PreviewOption,
+ pub _search_options: SearchOption,
+ pub _tab_options: TabOption,
+}
+
+impl AppConfig {
+ pub fn default_res() -> JoshutoResult<Self> {
+ let raw: AppConfigRaw = toml::from_str(DEFAULT_CONFIG_FILE_PATH)?;
+ Ok(Self::from(raw))
+ }
+
+ pub fn display_options_ref(&self) -> &DisplayOption {
+ &self._display_options
+ }
+ pub fn display_options_mut(&mut self) -> &mut DisplayOption {
+ &mut self._display_options
+ }
+
+ pub fn preview_options_ref(&self) -> &PreviewOption {
+ &self._preview_options
+ }
+ pub fn _preview_options_mut(&mut self) -> &mut PreviewOption {
+ &mut self._preview_options
+ }
+
+ pub fn search_options_ref(&self) -> &SearchOption {
+ &self._search_options
+ }
+
+ pub fn search_options_mut(&mut self) -> &mut SearchOption {
+ &mut self._search_options
+ }
+
+ pub fn tab_options_ref(&self) -> &TabOption {
+ &self._tab_options
+ }
+}
+
+impl std::default::Default for AppConfig {
+ fn default() -> Self {
+ // This should not fail.
+ // If it fails then there is a (syntax) error in the default config file
+ Self::default_res().unwrap()
+ }
+}
+
+impl TomlConfigFile for AppConfig {
+ fn get_config(file_name: &str) -> Self {
+ parse_config_or_default::<AppConfigRaw, AppConfig>(file_name)
+ }
+}
+
+impl From<AppConfigRaw> for AppConfig {
+ fn from(raw: AppConfigRaw) -> Self {
+ Self {
+ use_trash: raw.use_trash,
+ xdg_open: raw.xdg_open,
+ xdg_open_fork: raw.xdg_open_fork,
+ watch_files: raw.watch_files,
+ cmd_aliases: raw.cmd_aliases,
+ _display_options: DisplayOption::from(raw.display_options),
+ _preview_options: PreviewOption::from(raw.preview_options),
+ _search_options: SearchOption::from(raw.search_options),
+ _tab_options: TabOption::from(raw.tab_options),
+ }
+ }
+}