botw/tools/viking/src/ui.rs

60 lines
1.3 KiB
Rust

use colored::*;
use std::io::StderrLock;
use std::io::Write;
use textwrap::indent;
use crate::functions;
pub fn print_note(msg: &str) {
eprintln!("{}{}{}", "note".bold().cyan(), ": ".bold(), msg.bold())
}
pub fn print_warning(msg: &str) {
eprintln!("{}{}{}", "warning".bold().yellow(), ": ".bold(), msg.bold())
}
pub fn print_error(msg: &str) {
let stderr = std::io::stderr();
let mut lock = stderr.lock();
print_error_ex(&mut lock, msg);
}
pub fn print_error_ex(lock: &mut StderrLock, msg: &str) {
writeln!(
lock,
"{}{}{}",
"error".bold().red(),
": ".bold(),
msg.bold()
)
.unwrap();
}
pub fn format_symbol_name(name: &str) -> String {
functions::demangle_str(name).map_or(name.blue().to_string(), |demangled| {
format!("{} ({})", demangled.blue(), name.blue().dimmed(),)
})
}
pub fn format_address(addr: u64) -> String {
format!("{:#x}", addr).green().to_string()
}
pub fn print_detail(msg: &str) {
let stderr = std::io::stderr();
let mut lock = stderr.lock();
print_detail_ex(&mut lock, msg);
}
pub fn print_detail_ex(lock: &mut StderrLock, msg: &str) {
writeln!(
lock,
"{}\n",
indent(
&msg.clear().to_string(),
&"".bold().dimmed().to_string()
)
)
.unwrap();
}