diff options
Diffstat (limited to 'src/env.rs')
-rw-r--r-- | src/env.rs | 83 |
1 files changed, 66 insertions, 17 deletions
@@ -1,24 +1,73 @@ -#[cfg(not(test))] use std::env; -/// If `name` is set and, after trimming whitespace, is not empty string, then return that trimmed -/// string. Else None. -pub fn get_env_var(_name: &str) -> Option<String> { - #[cfg(not(test))] - match env::var(_name).unwrap_or_else(|_| "".to_string()).trim() { - "" => None, - non_empty_string => Some(non_empty_string.to_string()), +const COLORTERM: &str = "COLORTERM"; +const BAT_THEME: &str = "BAT_THEME"; +const GIT_CONFIG_PARAMETERS: &str = "GIT_CONFIG_PARAMETERS"; +const GIT_PREFIX: &str = "GIT_PREFIX"; +const DELTA_FEATURES: &str = "DELTA_FEATURES"; +const DELTA_NAVIGATE: &str = "DELTA_NAVIGATE"; +const DELTA_EXPERIMENTAL_MAX_LINE_DISTANCE_FOR_NAIVELY_PAIRED_LINES: &str = + "DELTA_EXPERIMENTAL_MAX_LINE_DISTANCE_FOR_NAIVELY_PAIRED_LINES"; +const DELTA_PAGER: &str = "DELTA_PAGER"; +const BAT_PAGER: &str = "BAT_PAGER"; +const PAGER: &str = "PAGER"; + +#[derive(Default, Clone)] +pub struct DeltaEnv { + pub bat_theme: Option<String>, + pub colorterm: Option<String>, + pub current_dir: Option<std::path::PathBuf>, + pub experimental_max_line_distance_for_naively_paired_lines: Option<String>, + pub features: Option<String>, + pub git_config_parameters: Option<String>, + pub git_prefix: Option<String>, + pub navigate: Option<String>, + pub pagers: (Option<String>, Option<String>, Option<String>), +} + +impl DeltaEnv { + /// Create a structure with current environment variable + pub fn init() -> Self { + let bat_theme = env::var(BAT_THEME).ok(); + let colorterm = env::var(COLORTERM).ok(); + let experimental_max_line_distance_for_naively_paired_lines = + env::var(DELTA_EXPERIMENTAL_MAX_LINE_DISTANCE_FOR_NAIVELY_PAIRED_LINES).ok(); + let features = env::var(DELTA_FEATURES).ok(); + let git_config_parameters = env::var(GIT_CONFIG_PARAMETERS).ok(); + let git_prefix = env::var(GIT_PREFIX).ok(); + let navigate = env::var(DELTA_NAVIGATE).ok(); + + let current_dir = env::current_dir().ok(); + let pagers = ( + env::var(DELTA_PAGER).ok(), + env::var(BAT_PAGER).ok(), + env::var(PAGER).ok(), + ); + + Self { + bat_theme, + colorterm, + current_dir, + experimental_max_line_distance_for_naively_paired_lines, + features, + git_config_parameters, + git_prefix, + navigate, + pagers, + } } - #[cfg(test)] - None } -/// If `name` is set to any value at all (including "") then return true; else false. -pub fn get_boolean_env_var(_name: &str) -> bool { - #[cfg(not(test))] - { - env::var(_name).ok().is_some() +#[cfg(test)] +pub mod tests { + use super::DeltaEnv; + use std::env; + + #[test] + fn test_env_parsing() { + let feature = "Awesome Feature"; + env::set_var("DELTA_FEATURES", feature); + let env = DeltaEnv::init(); + assert_eq!(env.features, Some(feature.into())); } - #[cfg(test)] - false } |