use postform_decoder::{Decoder, ElfMetadata, LogLevel};
use termion::color;
fn color_for_level(level: LogLevel) -> String {
match level {
LogLevel::Debug => String::from(color::Green.fg_str()),
LogLevel::Info => String::from(color::Yellow.fg_str()),
LogLevel::Warning => color::Rgb(255u8, 0xA5u8, 0u8).fg_string(),
LogLevel::Error => String::from(color::Red.fg_str()),
LogLevel::Unknown => color::Rgb(255u8, 0u8, 0u8).fg_string(),
}
}
pub fn handle_log(elf_metadata: &ElfMetadata, buffer: &[u8]) {
let mut decoder = Decoder::new(&elf_metadata);
match decoder.decode(buffer) {
Ok(log) => {
println!(
"{timestamp:<12.6} {color}{level:<11}{reset_color}: {msg}",
timestamp = log.timestamp,
color = color_for_level(log.level),
level = log.level.to_string(),
reset_color = color::Fg(color::Reset),
msg = log.message
);
println!(
"{color}└── File: {file_name}, Line number: {line_number}{reset}",
color = color::Fg(color::LightBlack),
file_name = log.file_name,
line_number = log.line_number,
reset = color::Fg(color::Reset)
);
}
Err(error) => {
println!(
"{color}Error parsing log:{reset_color} {error}.",
color = color::Fg(color::Red),
error = error,
reset_color = color::Fg(color::Reset)
);
}
}
}