1use core::fmt;
2
3use crate::Span;
4
5pub trait Tracer: Send + Sync + fmt::Debug + fmt::Display {
7 fn trace_tree_name(&self) -> &'static str;
8 fn clone_trace(&self) -> Box<dyn Tracer>;
9
10 fn trace(&self, message: &str) -> &dyn Tracer;
11 fn info(&self, message: &str) -> &dyn Tracer;
12 fn debug(&self, message: &str) -> &dyn Tracer;
13 fn warn(&self, message: &str) -> &dyn Tracer;
14 fn error(&self, message: &str) -> &dyn Tracer;
15
16 fn span(&self) -> &Span;
17}
18
19impl Clone for Box<dyn Tracer> {
20 fn clone(&self) -> Box<dyn Tracer> {
21 return self.clone_trace();
22 }
23}
24
25impl PartialEq for Box<dyn Tracer> {
26 fn eq(&self, other: &Self) -> bool {
27 return self.span() == other.span();
28 }
29}