From 168d568d549cf55848a33921403f5f1be577742e Mon Sep 17 00:00:00 2001 From: Matan Kushner Date: Thu, 4 Apr 2019 20:33:36 -0400 Subject: [PATCH] Add line_sep section --- benches/benchmarks.rs | 4 ++-- src/main.rs | 3 +++ src/modules/line_sep.rs | 13 +++++++++++++ src/modules/mod.rs | 2 ++ src/print.rs | 26 +++++++++++++++----------- 5 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 src/modules/line_sep.rs diff --git a/benches/benchmarks.rs b/benches/benchmarks.rs index 42a763b1..e72d9b09 100644 --- a/benches/benchmarks.rs +++ b/benches/benchmarks.rs @@ -27,7 +27,7 @@ mod tests { .get_matches_from(vec!["starship", "0"]); let segment = modules::handle("char", &args); - print::print_segment(segment) + print::stringify_segment(segment) }); } @@ -39,7 +39,7 @@ mod tests { .get_matches_from(vec!["starship", "0"]); let segment = modules::handle("dir", &args); - print::print_segment(segment) + print::stringify_segment(segment) }); } } diff --git a/src/main.rs b/src/main.rs index d6694e3d..7b10ddeb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,8 @@ #[macro_use] extern crate clap; +extern crate rayon; +extern crate ansi_term; +extern crate dirs; mod modules; mod print; diff --git a/src/modules/line_sep.rs b/src/modules/line_sep.rs new file mode 100644 index 00000000..dda14b8f --- /dev/null +++ b/src/modules/line_sep.rs @@ -0,0 +1,13 @@ +use super::Segment; +use clap::ArgMatches; + +/// Creates a segment for the line break +pub fn segment(_: &ArgMatches) -> Segment { + const LINE_ENDING: &str = "\n"; + + Segment { + value: String::from(LINE_ENDING), + suffix: None, + ..Default::default() + } +} diff --git a/src/modules/mod.rs b/src/modules/mod.rs index 13b18fa1..e55ac636 100644 --- a/src/modules/mod.rs +++ b/src/modules/mod.rs @@ -1,5 +1,6 @@ mod char; mod dir; +mod line_sep; use clap::ArgMatches; use ansi_term::Style; @@ -33,6 +34,7 @@ pub fn handle(module: &str, args: &ArgMatches) -> Segment { match module { "char" => char::segment(&args), "dir" => dir::segment(&args), + "line_sep" => line_sep::segment(&args), _ => panic!("Unknown module: {}", module), } diff --git a/src/print.rs b/src/print.rs index c2951967..50c691da 100644 --- a/src/print.rs +++ b/src/print.rs @@ -3,29 +3,33 @@ use crate::modules::Segment; use clap::ArgMatches; pub fn prompt(args: ArgMatches) { - let default_prompt = vec!["dir", "char"]; + let default_prompt = vec!["dir", "line_sep", "char"]; - for module in default_prompt { - let segment = modules::handle(module, &args); - print_segment(segment); - } + default_prompt.into_iter() + .map(|module| modules::handle(module, &args)) + .map(|segment| stringify_segment(segment)) + .for_each(|segment_string| print!("{}", segment_string)); } -pub fn print_segment(segment: Segment) { +pub fn stringify_segment(segment: Segment) -> String { let Segment { prefix, value, style, suffix, - } = segment; + } = segment; + + let mut segment_string = String::new(); if let Some(prefix) = prefix { - print_segment(*prefix); + segment_string += &stringify_segment(*prefix); } - - print!("{}", style.paint(value)); + + segment_string += &style.paint(value).to_string(); if let Some(suffix) = suffix { - print_segment(*suffix); + segment_string += &stringify_segment(*suffix); } + + segment_string }