use std::fmt::Write;
use tracing::field;
use crate::values::*;
#[allow(dead_code)]
pub(crate) trait AddFieldAndValue {
fn add_field_value(&mut self, fv: &crate::values::FieldAndValue);
}
#[allow(dead_code)]
pub(crate) struct EventBuilderVisitorWrapper<T: AddFieldAndValue> {
wrapped: T,
}
impl<T: AddFieldAndValue> From<T> for EventBuilderVisitorWrapper<T> {
fn from(value: T) -> Self {
EventBuilderVisitorWrapper { wrapped: value }
}
}
impl<T: AddFieldAndValue> field::Visit for EventBuilderVisitorWrapper<T> {
fn record_debug(&mut self, field: &field::Field, value: &dyn std::fmt::Debug) {
let mut string = String::with_capacity(10);
if write!(string, "{:?}", value).is_err() {
return;
}
self.wrapped.add_field_value(&FieldAndValue {
field_name: field.name(),
value: &ValueTypes::from(string),
})
}
fn record_f64(&mut self, field: &field::Field, value: f64) {
self.wrapped.add_field_value(&FieldAndValue {
field_name: field.name(),
value: &ValueTypes::from(value),
})
}
fn record_i64(&mut self, field: &field::Field, value: i64) {
self.wrapped.add_field_value(&FieldAndValue {
field_name: field.name(),
value: &ValueTypes::from(value),
})
}
fn record_u64(&mut self, field: &field::Field, value: u64) {
self.wrapped.add_field_value(&FieldAndValue {
field_name: field.name(),
value: &ValueTypes::from(value),
})
}
fn record_i128(&mut self, field: &field::Field, value: i128) {
self.wrapped.add_field_value(&FieldAndValue {
field_name: field.name(),
value: &ValueTypes::from(value),
})
}
fn record_u128(&mut self, field: &field::Field, value: u128) {
self.wrapped.add_field_value(&FieldAndValue {
field_name: field.name(),
value: &ValueTypes::from(value),
})
}
fn record_bool(&mut self, field: &field::Field, value: bool) {
self.wrapped.add_field_value(&FieldAndValue {
field_name: field.name(),
value: &ValueTypes::from(value),
})
}
fn record_str(&mut self, field: &field::Field, value: &str) {
self.wrapped.add_field_value(&FieldAndValue {
field_name: field.name(),
value: &ValueTypes::from(value.to_string()),
})
}
fn record_error(&mut self, _field: &field::Field, _value: &(dyn std::error::Error + 'static)) {}
}