use std::cmp; use chrono::{Datelike, NaiveDate}; use crate::files::primitives::{Time, Weekday}; use super::layout::line::{LineEntry, LineLayout, SpanSegment}; struct ShowLines { num_width: usize, span_width: usize, result: String, } impl ShowLines { fn new(num_width: usize, span_width: usize) -> Self { Self { num_width, span_width, result: String::new(), } } fn display_line(&mut self, line: &LineEntry) { match line { LineEntry::Day { spans, date } => self.display_line_date(spans, *date), LineEntry::Now { spans, time } => self.display_line_now(spans, *time), LineEntry::Entry { number, spans, time, text, } => self.display_line_entry(*number, spans, *time, text), } } fn display_line_date(&mut self, spans: &[Option], date: NaiveDate) { let weekday: Weekday = date.weekday().into(); let weekday = weekday.full_name(); self.push(&format!( "{:=>nw$}={:=nw$}\n", "", Self::display_spans(spans, '='), weekday, date, "", "", nw = self.num_width, sw = self.span_width )); } fn display_line_now(&mut self, spans: &[Option], time: Time) { self.push(&format!( "{:, spans: &[Option], time: Option