solverforge_console/
layer.rs1use crate::format::format_event;
4use crate::visitor::EventVisitor;
5use std::io::{self, Write};
6use tracing::{Event, Subscriber};
7use tracing_subscriber::layer::Context;
8use tracing_subscriber::Layer;
9
10pub struct SolverConsoleLayer;
12
13impl<S: Subscriber> Layer<S> for SolverConsoleLayer {
14 fn on_event(&self, event: &Event<'_>, _ctx: Context<'_, S>) {
15 let metadata = event.metadata();
16 let target = metadata.target();
17
18 if !target.starts_with("solverforge_solver")
20 && !target.starts_with("solverforge_dynamic")
21 && !target.starts_with("solverforge_py")
22 && !target.starts_with("solverforge::")
23 {
24 return;
25 }
26
27 let mut visitor = EventVisitor::default();
28 event.record(&mut visitor);
29
30 let level = *metadata.level();
31 let output = format_event(&visitor, level);
32 if !output.is_empty() {
33 let _ = writeln!(io::stdout(), "{}", output);
34 }
35 }
36}