use std::fmt::Debug;
use tracing::field::Field;
use tracing::field::Visit;
use tracing::span;
use tracing::Event;
pub trait RecordExt {
fn record_bool(&self, visitor: impl FnMut(&Field, bool));
}
impl<'a> RecordExt for Event<'a> {
fn record_bool(&self, visitor: impl FnMut(&Field, bool)) {
self.record(&mut VisitBool(visitor));
}
}
impl<'a> RecordExt for span::Attributes<'a> {
fn record_bool(&self, visitor: impl FnMut(&Field, bool)) {
self.record(&mut VisitBool(visitor));
}
}
impl<'a> RecordExt for span::Record<'a> {
fn record_bool(&self, visitor: impl FnMut(&Field, bool)) {
self.record(&mut VisitBool(visitor));
}
}
struct VisitBool<F>(F);
impl<F: FnMut(&Field, bool)> Visit for VisitBool<F> {
fn record_bool(&mut self, field: &Field, value: bool) {
(self.0)(field, value);
}
fn record_debug(&mut self, _field: &Field, _value: &dyn Debug) {}
}