use std::ffi::OsString;
pub static LS_COLORS: &str = "LS_COLORS";
pub static COLUMNS: &str = "COLUMNS";
pub static TIME_STYLE: &str = "TIME_STYLE";
pub static NO_COLOR: &str = "NO_COLOR";
pub static EXA_COLORS: &str = "EXA_COLORS";
pub static EZA_COLORS: &str = "EZA_COLORS";
pub static EXA_STRICT: &str = "EXA_STRICT";
pub static EZA_STRICT: &str = "EZA_STRICT";
pub static EXA_DEBUG: &str = "EXA_DEBUG";
pub static EZA_DEBUG: &str = "EZA_DEBUG";
pub static EXA_GRID_ROWS: &str = "EXA_GRID_ROWS";
pub static EZA_GRID_ROWS: &str = "EZA_GRID_ROWS";
pub static EXA_ICON_SPACING: &str = "EXA_ICON_SPACING";
pub static EZA_ICON_SPACING: &str = "EZA_ICON_SPACING";
pub static EXA_OVERRIDE_GIT: &str = "EXA_OVERRIDE_GIT";
pub static EZA_OVERRIDE_GIT: &str = "EZA_OVERRIDE_GIT";
pub static EXA_MIN_LUMINANCE: &str = "EXA_MIN_LUMINANCE";
pub static EZA_MIN_LUMINANCE: &str = "EZA_MIN_LUMINANCE";
pub static EZA_ICONS_AUTO: &str = "EZA_ICONS_AUTO";
pub static EZA_STDIN_SEPARATOR: &str = "EZA_STDIN_SEPARATOR";
pub static EZA_WINDOWS_ATTRIBUTES: &str = "EZA_WINDOWS_ATTRIBUTES";
pub trait Vars {
fn get(&self, name: &'static str) -> Option<OsString>;
fn get_with_fallback(&self, name: &'static str, fallback: &'static str) -> Option<OsString> {
self.get(name).or_else(|| self.get(fallback))
}
fn source(&self, name: &'static str, fallback: &'static str) -> Option<&'static str> {
match self.get(name) {
Some(_) => Some(name),
None => self.get(fallback).and(Some(fallback)),
}
}
}
#[cfg(test)]
impl Vars for Option<OsString> {
fn get(&self, _name: &'static str) -> Option<OsString> {
self.clone()
}
}
#[cfg(test)]
#[allow(dead_code)]
pub struct MockVars {
columns: OsString,
colors: OsString,
no_colors: OsString,
strict: OsString,
debug: OsString,
grid_rows: OsString,
icon_spacing: OsString,
luminance: OsString,
icons: OsString,
}
#[cfg(test)]
#[allow(dead_code)]
impl Vars for MockVars {
fn get(&self, name: &'static str) -> Option<OsString> {
match name {
"EXA_STRICT" | "EZA_STRICT" => Some(self.strict.clone()),
"EZA_COLORS" | "LS_COLORS" | "EXA_COLORS" => Some(self.colors.clone()),
"EXA_DEBUG" | "EZA_DEBUG" => Some(self.debug.clone()),
"EXA_GRID_ROWS" | "EZA_GRID_ROWS" => Some(self.grid_rows.clone()),
"EXA_ICON_SPACING" | "EZA_ICON_SPACING" => Some(self.icon_spacing.clone()),
"EXA_MIN_LUMINANCE" | "EZA_MIN_LUMINANCE" => Some(self.luminance.clone()),
"EZA_ICONS_AUTO" => Some(self.icons.clone()),
"COLUMNS" => Some(self.columns.clone()),
"NO_COLOR" => Some(self.no_colors.clone()),
_ => None,
}
}
}
#[cfg(test)]
#[allow(dead_code)]
impl MockVars {
pub fn set(&mut self, var: &'static str, value: &OsString) {
match var {
"EXA_STRICT" | "EZA_STRICT" => self.strict = value.clone(),
"EZA_COLORS" | "LS_COLORS" | "EXA_COLORS" => self.colors = value.clone(),
"EXA_DEBUG" | "EZA_DEBUG" => self.debug = value.clone(),
"EXA_GRID_ROWS" | "EZA_GRID_ROWS" => self.grid_rows = value.clone(),
"EXA_ICON_SPACING" | "EZA_ICON_SPACING" => self.icon_spacing = value.clone(),
"EXA_MIN_LUMINANCE" | "EZA_MIN_LUMINANCE" => self.luminance = value.clone(),
"EZA_ICONS_AUTO" => self.icons = value.clone(),
"COLUMNS" => self.columns = value.clone(),
"NO_COLOR" => self.no_colors = value.clone(),
_ => (),
}
}
}