diff options
author | Andrew Dassonville <dassonville.andrew@gmail.com> | 2019-07-28 18:05:13 -0700 |
---|---|---|
committer | Matan Kushner <hello@matchai.me> | 2019-07-28 21:05:13 -0400 |
commit | 5dbf4381acd1fd8dbb2905828c3fcc6515d850cf (patch) | |
tree | 36a13ea34b8af9c0f6c5fa30c8ae9d7c3835f0de /src | |
parent | ab46710fc47891a80eb1b6073616c95a1acc92bd (diff) |
feat: Allow directory truncation length to be configured (#120)
This allows the directory truncation length to be configured. Previously, it was hard-coded to truncate to 3 parent directories.
Diffstat (limited to 'src')
-rw-r--r-- | src/config.rs | 34 | ||||
-rw-r--r-- | src/module.rs | 10 | ||||
-rw-r--r-- | src/modules/directory.rs | 8 |
3 files changed, 50 insertions, 2 deletions
diff --git a/src/config.rs b/src/config.rs index d5861b9f0..c06541eeb 100644 --- a/src/config.rs +++ b/src/config.rs @@ -12,6 +12,7 @@ pub trait Config { // Config accessor methods fn get_as_bool(&self, key: &str) -> Option<bool>; fn get_as_str(&self, key: &str) -> Option<&str>; + fn get_as_i64(&self, key: &str) -> Option<i64>; // Internal implementation for accessors fn get_config(&self, key: &str) -> Option<&toml::value::Value>; @@ -129,6 +130,23 @@ impl Config for Table { str_value } + + /// Get a key from a module's configuration as an integer + fn get_as_i64(&self, key: &str) -> Option<i64> { + let value = self.get_config(key)?; + let i64_value = value.as_integer(); + + if i64_value.is_none() { + log::debug!( + "Expected \"{}\" to be an integer. Instead received {} of type {}.", + key, + value, + value.type_str() + ); + } + + i64_value + } } mod tests { @@ -165,4 +183,20 @@ mod tests { table.insert(String::from("boolean"), toml::value::Value::Boolean(true)); assert_eq!(table.get_as_str("boolean"), None); } + + #[test] + fn table_get_as_i64() { + let mut table = toml::value::Table::new(); + + // Use with integer value + table.insert(String::from("integer"), toml::value::Value::Integer(82)); + assert_eq!(table.get_as_i64("integer"), Some(82)); + + // Use with string value + table.insert( + String::from("string"), + toml::value::Value::String(String::from("82")), + ); + assert_eq!(table.get_as_bool("string"), None); + } } diff --git a/src/module.rs b/src/module.rs index af985ea3a..526345b95 100644 --- a/src/module.rs +++ b/src/module.rs @@ -99,6 +99,16 @@ impl<'a> Module<'a> { fn config_value(&self, key: &str) -> Option<&str> { self.config.and_then(|config| config.get_as_str(key)) } + + /// Get a module's config value as an int + pub fn config_value_i64(&self, key: &str) -> Option<i64> { + self.config.and_then(|config| config.get_as_i64(key)) + } + + /// Get a module's config value as a bool + pub fn config_value_bool(&self, key: &str) -> Option<bool> { + self.config.and_then(|config| config.get_as_bool(key)) + } } impl<'a> fmt::Display for Module<'a> { diff --git a/src/modules/directory.rs b/src/modules/directory.rs index 61937e751..a14f1c204 100644 --- a/src/modules/directory.rs +++ b/src/modules/directory.rs @@ -15,12 +15,16 @@ use super::{Context, Module}; /// Paths will be limited in length to `3` path components by default. pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> { const HOME_SYMBOL: &str = "~"; - const DIR_TRUNCATION_LENGTH: usize = 3; + const DIR_TRUNCATION_LENGTH: i64 = 3; let module_color = Color::Cyan.bold(); let mut module = context.new_module("directory")?; module.set_style(module_color); + let truncation_length = module + .config_value_i64("truncation_length") + .unwrap_or(DIR_TRUNCATION_LENGTH); + let current_dir = &context.current_dir; log::debug!("Current directory: {:?}", current_dir); @@ -38,7 +42,7 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> { } // Truncate the dir string to the maximum number of path components - let truncated_dir_string = truncate(dir_string, DIR_TRUNCATION_LENGTH); + let truncated_dir_string = truncate(dir_string, truncation_length as usize); module.new_segment("path", &truncated_dir_string); module.get_prefix().set_value("in "); |