summaryrefslogtreecommitdiffstats
path: root/src/config/general/app_crude.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/config/general/app_crude.rs')
-rw-r--r--src/config/general/app_crude.rs51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/config/general/app_crude.rs b/src/config/general/app_crude.rs
new file mode 100644
index 0000000..d24eff9
--- /dev/null
+++ b/src/config/general/app_crude.rs
@@ -0,0 +1,51 @@
+use std::convert::From;
+
+use serde_derive::Deserialize;
+
+use crate::config::option::{DisplayOption, PreviewOption, TabOption};
+use crate::config::{parse_to_config_file, AppConfig, TomlConfigFile};
+
+use super::display_crude::DisplayOptionCrude;
+use super::preview_crude::PreviewOptionCrude;
+use super::tab_crude::TabOptionCrude;
+
+const fn default_true() -> bool {
+ true
+}
+const fn default_scroll_offset() -> usize {
+ 6
+}
+
+#[derive(Clone, Debug, Deserialize)]
+pub struct AppConfigCrude {
+ #[serde(default = "default_scroll_offset")]
+ pub scroll_offset: usize,
+ #[serde(default = "default_true")]
+ pub use_trash: bool,
+ #[serde(default)]
+ pub xdg_open: bool,
+ #[serde(default, rename = "display")]
+ pub display_options: DisplayOptionCrude,
+ #[serde(default, rename = "preview")]
+ pub preview_options: PreviewOptionCrude,
+ #[serde(default, rename = "tab")]
+ pub tab_options: TabOptionCrude,
+}
+
+impl From<AppConfigCrude> for AppConfig {
+ fn from(crude: AppConfigCrude) -> Self {
+ Self {
+ use_trash: crude.use_trash,
+ xdg_open: crude.xdg_open,
+ _display_options: DisplayOption::from(crude.display_options),
+ _preview_options: PreviewOption::from(crude.preview_options),
+ _tab_options: TabOption::from(crude.tab_options),
+ }
+ }
+}
+
+impl TomlConfigFile for AppConfig {
+ fn get_config(file_name: &str) -> Self {
+ parse_to_config_file::<AppConfigCrude, AppConfig>(file_name).unwrap_or_else(Self::default)
+ }
+}