diff options
author | Matan Kushner <hello@matchai.me> | 2019-04-03 20:14:26 -0400 |
---|---|---|
committer | Matan Kushner <hello@matchai.me> | 2019-04-03 20:14:26 -0400 |
commit | e2ba7a13542c0fcefee3e6e85d8b0bf3ec6c8265 (patch) | |
tree | a3b3872846b52012ce3327557b764f9665a6ec7d /src | |
parent | 41ee54933bd2820b1ba97726514f785f1ac73824 (diff) |
Add segment structure and logic
Diffstat (limited to 'src')
-rw-r--r-- | src/char.rs | 20 | ||||
-rw-r--r-- | src/main.rs | 19 | ||||
-rw-r--r-- | src/modules/char.rs | 34 | ||||
-rw-r--r-- | src/modules/mod.rs | 11 | ||||
-rw-r--r-- | src/print.rs | 30 |
5 files changed, 89 insertions, 25 deletions
diff --git a/src/char.rs b/src/char.rs deleted file mode 100644 index 7d0998b4a..000000000 --- a/src/char.rs +++ /dev/null @@ -1,20 +0,0 @@ -use std::env; -use ansi_term::Color; - -pub fn display() { - let PROMPT_CHAR = "➜ "; - let COLOR_SUCCESS = Color::Green; - let COLOR_FAILURE = Color::Red; - - let color = match env::var_os("status") { - None | "0" => COLOR_SUCCESS, - _ => COLOR_FAILURE - }; - - // let color = match env::var("status") { - // Ok("0") | _ => COLOR_SUCCESS, - // Ok("1") => COLOR_FAILURE - // }; - - print!("{}", color.paint(PROMPT_CHAR)); -} diff --git a/src/main.rs b/src/main.rs index 8a6cd5fd7..ab7e04e56 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,19 @@ #[macro_use] extern crate clap; +extern crate ansi_term; + +mod modules; +mod print; + +use ansi_term::Style; use clap::App; -use std::io; -mod char; +pub struct Segment { + style: Style, + value: String, + prefix: Option<Box<Segment>>, + suffix: Option<Box<Segment>>, +} fn main() { App::new("Starship") @@ -12,9 +22,8 @@ fn main() { .version(crate_version!()) // pull the authors from Cargo.toml .author(crate_authors!()) + .after_help("https://github.com/matchai/starship") .get_matches(); - prompt::char(); - // let stdout = io::stdout(); - // let mut handle = io::BufWriter::new(stdout); + print::prompt(); } diff --git a/src/modules/char.rs b/src/modules/char.rs new file mode 100644 index 000000000..96387c740 --- /dev/null +++ b/src/modules/char.rs @@ -0,0 +1,34 @@ +use crate::Segment; +use ansi_term::{Color, Style}; +use std::env; + +pub fn segment() -> Segment { + const PROMPT_CHAR: &str = "➜ "; + const COLOR_SUCCESS: Color = Color::Green; + const COLOR_FAILURE: Color = Color::Red; + + let default_prefix = Segment { + value: String::from("testPrefix"), + style: Style::default(), + prefix: None, + suffix: None, + }; + + let color; + if let Ok(status) = env::var("status") { + if status == "0" { + color = COLOR_SUCCESS; + } else { + color = COLOR_FAILURE; + } + } else { + panic!("No status environment variable provided"); + } + + Segment { + prefix: Some(Box::new(default_prefix)), + value: String::from(PROMPT_CHAR), + style: Style::new().fg(color), + suffix: None, + } +} diff --git a/src/modules/mod.rs b/src/modules/mod.rs new file mode 100644 index 000000000..8fe6d63a4 --- /dev/null +++ b/src/modules/mod.rs @@ -0,0 +1,11 @@ +mod char; + +use crate::Segment; + +pub fn handle(module: &str) -> Segment { + match module { + "char" => char::segment(), + + _ => panic!("Unknown module: {}", module), + } +} diff --git a/src/print.rs b/src/print.rs new file mode 100644 index 000000000..2f7ca0999 --- /dev/null +++ b/src/print.rs @@ -0,0 +1,30 @@ +use crate::modules; +use crate::Segment; + +pub fn prompt() { + let default_prompt = vec!["char"]; + + for module in default_prompt { + let segment = modules::handle(module); + print_segment(segment); + } +} + +fn print_segment(segment: Segment) { + let Segment { + prefix, + value, + style, + suffix, + } = segment; + + if let Some(prefix) = prefix { + print_segment(*prefix); + } + + print!("{}", style.paint(value)); + + if let Some(suffix) = suffix { + print_segment(*suffix); + } +} |