From d82ebc4457adefcd9ad45c4d3d6d611c28d80cc3 Mon Sep 17 00:00:00 2001 From: Matan Kushner Date: Fri, 12 Apr 2019 17:49:20 -0400 Subject: Add builder pattern for segment --- src/segment.rs | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/segment.rs (limited to 'src/segment.rs') 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, + style: Style, + value: String, + prefix: OptionalSegment, + suffix: OptionalSegment, +} + +impl Segment { + pub fn new(name: S) -> Segment where S: Into { + 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>; -- cgit v1.2.3