mirror of
https://github.com/Llewellynvdm/starship.git
synced 2024-06-12 13:22:20 +00:00
2d4b183fce
* refactor: replace module_config_derive with serde Changes include: * Removing `starship_module_config_derive` and replacing it with `serde::Deserialize` * Removing `RootModuleConfig::load_config`. While potentially useful, it was only used in tests. And it would require something like `serde::DeserializeSeed` which is not derived by serde. * Merging `RootModuleConfig` into `ModuleConfig` * Implementing a `ValueDeserializer` that holds a reference to a `toml::Value` in `serde_utils.rs` * Deserialization errors (invalid type) are now logged and include the current key and the struct names * Unknown keys are now considered an error. "Did you mean?"-messages are still possible * fix typo Co-authored-by: Matan Kushner <hello@matchai.dev> Co-authored-by: Matan Kushner <hello@matchai.dev>
69 lines
1.7 KiB
Rust
69 lines
1.7 KiB
Rust
use super::{Context, Module};
|
|
|
|
use crate::config::{parse_style_string, ModuleConfig};
|
|
use crate::configs::fill::FillConfig;
|
|
use crate::segment::Segment;
|
|
|
|
/// Creates a module that fills the any extra space on the line.
|
|
///
|
|
pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
|
|
let mut module = context.new_module("fill");
|
|
let config: FillConfig = FillConfig::try_load(module.config);
|
|
|
|
if config.disabled {
|
|
return None;
|
|
}
|
|
|
|
let style = parse_style_string(config.style);
|
|
|
|
module.set_segments(vec![Segment::fill(style, config.symbol)]);
|
|
|
|
Some(module)
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use crate::test::ModuleRenderer;
|
|
use ansi_term::Color;
|
|
|
|
#[test]
|
|
fn basic() {
|
|
let actual = ModuleRenderer::new("fill")
|
|
.config(toml::toml! {
|
|
[fill]
|
|
style = "bold green"
|
|
symbol = "*-"
|
|
})
|
|
.collect();
|
|
let expected = Some(format!("{}", Color::Green.bold().paint("*-")));
|
|
|
|
assert_eq!(expected, actual);
|
|
}
|
|
|
|
#[test]
|
|
fn module_disabled() {
|
|
let actual = ModuleRenderer::new("fill")
|
|
.config(toml::toml! {
|
|
[fill]
|
|
disabled = true
|
|
})
|
|
.collect();
|
|
let expected = Option::<String>::None;
|
|
|
|
assert_eq!(expected, actual);
|
|
}
|
|
|
|
#[test]
|
|
fn module_enabled() {
|
|
let actual = ModuleRenderer::new("fill")
|
|
.config(toml::toml! {
|
|
[fill]
|
|
disabled = false
|
|
})
|
|
.collect();
|
|
let expected = Some(format!("{}", Color::Black.bold().paint(".")));
|
|
|
|
assert_eq!(expected, actual);
|
|
}
|
|
}
|