Skip to main content

nf_rated/render/components/
log.rs

1use tui::{
2    style::Color,
3    style::Style,
4    text::Span,
5    text::Spans,
6    widgets::Block,
7    widgets::Borders,
8    widgets::{List, ListItem},
9};
10
11use crate::render::Log;
12
13pub fn render_log(logs: &Vec<Log>) -> List {
14    let items: Vec<ListItem> = logs.iter().rev().map(render_log_entry).collect();
15    List::new(items).block(Block::default().borders(Borders::ALL))
16}
17
18fn render_log_entry(entry: &Log) -> ListItem {
19    let (prefix, msg, style) = match entry {
20        Log::Error(msg) => ("ERR ", msg, Style::default().fg(Color::Red)),
21        Log::Warn(msg) => ("WARN", msg, Style::default().fg(Color::Blue)),
22        Log::Info(msg) => ("INFO", msg, Style::default().fg(Color::Yellow)),
23        Log::Debug(msg) => ("DEBG", msg, Style::default().fg(Color::Gray)),
24    };
25    let prefix_span = Span::styled(prefix, style);
26    let msg_span = Span::styled(msg, Style::default().fg(Color::White));
27    let bar = Span::raw(" | ");
28
29    ListItem::new(Spans(vec![prefix_span, bar, msg_span]))
30}