use crate::{
cli::SelectorArgs,
common::{RegexApps, RegexHandler, UserPath},
error::Result,
};
use serde::{Deserialize, Serialize};
use tracing::debug;
#[derive(Debug, Serialize, Deserialize)]
#[serde(default)]
pub struct ConfigFile {
pub enable_selector: bool,
pub selector: String,
pub term_exec_args: Option<String>,
pub expand_wildcards: bool,
#[serde(skip_serializing)]
pub handlers: RegexApps,
}
impl Default for ConfigFile {
fn default() -> Self {
ConfigFile {
enable_selector: false,
selector: "rofi -dmenu -i -p 'Open With: '".into(),
term_exec_args: Some("-e".into()),
expand_wildcards: false,
handlers: Default::default(),
}
}
}
impl ConfigFile {
pub fn get_regex_handler(&self, path: &UserPath) -> Result<RegexHandler> {
self.handlers.get_handler(path)
}
#[mutants::skip] pub fn load() -> Result<Self> {
Ok(confy::load("handlr")?)
}
pub fn override_selector(&mut self, selector_args: SelectorArgs) {
if let Some(selector) = selector_args.selector {
debug!("Overriding selector command: {}", selector);
self.selector = selector;
}
self.enable_selector = selector_args
.enable_selector
.unwrap_or(self.enable_selector);
debug!("Selector enabled: {}", self.enable_selector);
}
}