nf_rated/render/components/
log.rs1use 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}