facet_testhelpers/
lib.rs

1#![warn(missing_docs)]
2#![warn(clippy::std_instead_of_core)]
3#![warn(clippy::std_instead_of_alloc)]
4#![forbid(unsafe_code)]
5#![doc = include_str!("../README.md")]
6
7use log::{Level, LevelFilter, Log, Metadata, Record};
8use std::io::Write;
9use yansi::{Paint as _, Style};
10
11struct SimpleLogger;
12
13impl Log for SimpleLogger {
14    fn enabled(&self, _metadata: &Metadata) -> bool {
15        true
16    }
17
18    fn log(&self, record: &Record) {
19        // Create style based on log level
20        let level_style = match record.level() {
21            Level::Error => Style::new().rgb(243, 139, 168), // Catppuccin red (Maroon)
22            Level::Warn => Style::new().rgb(249, 226, 175),  // Catppuccin yellow (Peach)
23            Level::Info => Style::new().rgb(166, 227, 161),  // Catppuccin green (Green)
24            Level::Debug => Style::new().rgb(137, 180, 250), // Catppuccin blue (Blue)
25            Level::Trace => Style::new().rgb(148, 226, 213), // Catppuccin teal (Teal)
26        };
27
28        // Convert level to styled display
29        let level = record.level();
30
31        eprintln!(
32            "{} - {}: {}",
33            level.paint(level_style),
34            record.target().blue(),
35            record.args()
36        );
37    }
38
39    fn flush(&self) {
40        let _ = std::io::stderr().flush();
41    }
42}
43
44/// Installs color-backtrace (except on miri), and sets up a simple logger.
45pub fn setup() {
46    #[cfg(not(miri))]
47    color_eyre::install().expect("Failed to set up color-eyre");
48    #[cfg(not(miri))]
49    color_backtrace::install();
50
51    let logger = Box::new(SimpleLogger);
52    _ = log::set_boxed_logger(logger);
53    log::set_max_level(LevelFilter::Trace);
54}