summaryrefslogtreecommitdiffstats
path: root/src/config/option/search_option.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/config/option/search_option.rs')
-rw-r--r--src/config/option/search_option.rs44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/config/option/search_option.rs b/src/config/option/search_option.rs
new file mode 100644
index 0000000..0fa889b
--- /dev/null
+++ b/src/config/option/search_option.rs
@@ -0,0 +1,44 @@
+use std::str::FromStr;
+
+use crate::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 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,
+ 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"),
+ )),
+ }
+ }
+}