use core::fmt;
use crate::Span;
pub trait Tracer: Send + Sync + fmt::Debug + fmt::Display {
fn trace_tree_name(&self) -> &'static str;
fn clone_trace(&self) -> Box<dyn Tracer>;
fn trace(&self, message: &str) -> &dyn Tracer;
fn info(&self, message: &str) -> &dyn Tracer;
fn debug(&self, message: &str) -> &dyn Tracer;
fn warn(&self, message: &str) -> &dyn Tracer;
fn error(&self, message: &str) -> &dyn Tracer;
fn span(&self) -> &Span;
}
impl Clone for Box<dyn Tracer> {
fn clone(&self) -> Box<dyn Tracer> {
return self.clone_trace();
}
}
impl PartialEq for Box<dyn Tracer> {
fn eq(&self, other: &Self) -> bool {
return self.span() == other.span();
}
}