diff options
Diffstat (limited to 'src/segment.rs')
-rw-r--r-- | src/segment.rs | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/segment.rs b/src/segment.rs new file mode 100644 index 000000000..df3017628 --- /dev/null +++ b/src/segment.rs @@ -0,0 +1,83 @@ +use ansi_term::Style; + +pub struct Segment { + name: Option<String>, + style: Style, + value: String, + prefix: OptionalSegment, + suffix: OptionalSegment, +} + +impl Segment { + pub fn new<S>(name: S) -> Segment where S: Into<String> { + let default_prefix = Some(Box::new(Segment { + name: Some(format!("{} {}", name.into(), "prefix")), + style: Style::default(), + value: String::from("via "), + prefix: None, + suffix: None, + })); + + let default_suffix = Some(Box::new(Segment { + name: Some(format!("{} {}", name.into(), "suffix")), + style: Style::default(), + value: String::from(" "), + prefix: None, + suffix: None, + })); + + Segment { + name: Some(name.into()), + style: Style::default(), + value: String::from(""), + prefix: default_prefix, + suffix: default_suffix, + } + } + + pub fn set_style<'a>(&'a mut self, style: Style) -> &'a mut Segment { + self.style = style; + self + } + + pub fn set_value<'a>(&'a mut self, value: String) -> &'a mut Segment { + self.value = value; + self + } + + pub fn set_prefix<'a>(&'a mut self, prefix: Segment) -> &'a mut Segment { + self.prefix = Some(Box::new(prefix)); + self + } + + pub fn set_suffix<'a>(&'a mut self, suffix: Segment) -> &'a mut Segment { + self.suffix = Some(Box::new(suffix)); + self + } + + pub fn output<'a>(&'a self) -> String { + let Segment { + name: _name, + prefix, + value, + style, + suffix, + } = self; + + let mut segment_string = String::new(); + + if let Some(prefix) = prefix { + segment_string += &prefix.output() + } + + segment_string += &style.paint(value).to_string(); + + if let Some(suffix) = suffix { + segment_string += &suffix.output(); + } + + segment_string + } +} + +type OptionalSegment = Option<Box<Segment>>; |