fn render(&self, width: usize) -> Vec<ColouredString>;
}
+impl<T: TextFragment> TextFragment for Option<T> {
+ fn render(&self, width: usize) -> Vec<ColouredString> {
+ match self {
+ Some(ref inner) => inner.render(width),
+ None => Vec::new(),
+ }
+ }
+}
+
+impl<T: TextFragment> TextFragment for Vec<T> {
+ fn render(&self, width: usize) -> Vec<ColouredString> {
+ itertools::concat(self.iter().map(|x| x.render(width)))
+ }
+}
+
pub struct BlankLine {}
impl BlankLine {
push_fragment(&mut lines, self.sep.render(width));
push_fragment(&mut lines, self.from.render(width));
- if let Some(via) = &self.via {
- push_fragment(&mut lines, via.render(width));
- }
- if let Some(irt) = &self.irt {
- push_fragment(&mut lines,irt.render(width));
- }
+ push_fragment(&mut lines, self.via.render(width));
+ push_fragment(&mut lines, self.irt.render(width));
push_fragment(&mut lines, self.blank.render(width));
let rendered_content = self.content.render(width);
let content_empty = rendered_content.len() == 0;
replies: Paragraph,
boosts: Paragraph,
favourites: Paragraph,
+ mentions_header: Option<Paragraph>,
mentions: Vec<Paragraph>,
client_name: Paragraph,
client_url: Paragraph,
.add(&ColouredString::plain(
&format!("Favourites: {}", st.favourites_count)));
- let mut mentions: Vec<_> = st.mentions.iter().map(|m| {
+ let mentions: Vec<_> = st.mentions.iter().map(|m| {
Paragraph::new().set_indent(2, 2)
.add(&ColouredString::uniform(&client.fq(&m.acct), 'f'))
}).collect();
- if !mentions.is_empty() {
- mentions.insert(0, Paragraph::new().add(
- &ColouredString::plain("Mentioned users:")));
- }
+ let mentions_header = if mentions.is_empty() {
+ None
+ } else {
+ Some(Paragraph::new().add(
+ &ColouredString::plain("Mentioned users:")))
+ };
let client_name = Paragraph::new()
.add(&ColouredString::plain("Client name: "))
boosts,
favourites,
mentions,
+ mentions_header,
client_name,
client_url,
sep: SeparatorLine::new(None, false, false),
push_fragment(&mut lines, self.blank.render(width));
push_fragment(&mut lines, self.id.render(width));
- if let Some(webstatus) = &self.webstatus {
- push_fragment(&mut lines, webstatus.render(width));
- }
+ push_fragment(&mut lines, self.webstatus.render(width));
push_fragment(&mut lines, self.blank.render(width));
push_fragment(&mut lines, self.creation.render(width));
push_fragment(&mut lines, self.blank.render(width));
if !self.mentions.is_empty() {
- for para in &self.mentions {
- push_fragment(&mut lines, para.render(width));
- }
+ push_fragment(&mut lines, self.mentions_header.render(width));
+ push_fragment(&mut lines, self.mentions.render(width));
push_fragment(&mut lines, self.blank.render(width));
}
}
if !self.flags.is_empty() {
- for para in &self.flags {
- push_fragment(&mut lines, para.render(width));
- }
+ push_fragment(&mut lines, self.flags.render(width));
push_fragment(&mut lines, self.blank.render(width));
}
if !self.relationships.is_empty() {
- for para in &self.relationships {
- push_fragment(&mut lines, para.render(width));
- }
+ push_fragment(&mut lines, self.relationships.render(width));
push_fragment(&mut lines, self.blank.render(width));
}