diff options
Diffstat (limited to 'src/config/clean/app/search/config.rs')
-rw-r--r-- | src/config/clean/app/search/config.rs | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/config/clean/app/search/config.rs b/src/config/clean/app/search/config.rs new file mode 100644 index 0000000..7bd82e1 --- /dev/null +++ b/src/config/clean/app/search/config.rs @@ -0,0 +1,73 @@ +use std::str::FromStr; + +use crate::{ + config::raw::app::display::search::SearchOptionRaw, + error::{JoshutoError, JoshutoErrorKind, JoshutoResult}, +}; + +/// Search and selection options globally valid for Joshuto (for all tabs) +#[derive(Clone, Debug)] +pub struct SearchOption { + pub string_case_sensitivity: CaseSensitivity, + pub glob_case_sensitivity: CaseSensitivity, + pub regex_case_sensitivity: CaseSensitivity, + pub fzf_case_sensitivity: CaseSensitivity, +} + +#[derive(Clone, Copy, Debug)] +pub enum CaseSensitivity { + Insensitive, + Sensitive, + Smart, +} + +impl std::default::Default for SearchOption { + fn default() -> Self { + Self { + string_case_sensitivity: CaseSensitivity::Insensitive, + glob_case_sensitivity: CaseSensitivity::Sensitive, + regex_case_sensitivity: CaseSensitivity::Sensitive, + fzf_case_sensitivity: CaseSensitivity::Insensitive, + } + } +} + +impl FromStr for CaseSensitivity { + type Err = JoshutoError; + + fn from_str(s: &str) -> JoshutoResult<Self> { + match s { + "insensitive" => Ok(Self::Insensitive), + "sensitive" => Ok(Self::Sensitive), + "smart" => Ok(Self::Smart), + otherwise => Err(JoshutoError::new( + JoshutoErrorKind::InvalidParameters, + format!("Case sensitivity '{otherwise}' unknown"), + )), + } + } +} + +impl From<SearchOptionRaw> for SearchOption { + fn from(raw: SearchOptionRaw) -> Self { + let string_case_sensitivity = + CaseSensitivity::from_str(raw.string_case_sensitivity.as_str()) + .unwrap_or(CaseSensitivity::Insensitive); + + let glob_case_sensitivity = CaseSensitivity::from_str(raw.glob_case_sensitivity.as_str()) + .unwrap_or(CaseSensitivity::Sensitive); + + let regex_case_sensitivity = CaseSensitivity::from_str(raw.regex_case_sensitivity.as_str()) + .unwrap_or(CaseSensitivity::Sensitive); + + let fzf_case_sensitivity = CaseSensitivity::from_str(raw.fzf_case_sensitivity.as_str()) + .unwrap_or(CaseSensitivity::Insensitive); + + Self { + string_case_sensitivity, + glob_case_sensitivity, + regex_case_sensitivity, + fzf_case_sensitivity, + } + } +} |