move err macro visitor out-of-line; reduce codegen

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk 2024-11-11 22:18:14 +00:00
parent 3962333043
commit 999d731a65
2 changed files with 40 additions and 35 deletions

View file

@ -111,12 +111,8 @@ macro_rules! err {
#[macro_export]
macro_rules! err_log {
($out:ident, $level:ident, $($fields:tt)+) => {{
use std::{fmt, fmt::Write};
use $crate::tracing::{
callsite, callsite2, level_enabled, metadata, valueset, Callsite, Event, __macro_support,
__tracing_log,
field::{Field, ValueSet, Visit},
callsite, callsite2, metadata, valueset, Callsite,
Level,
};
@ -134,34 +130,7 @@ macro_rules! err_log {
fields: $($fields)+,
};
let visit = &mut |vs: ValueSet<'_>| {
struct Visitor<'a>(&'a mut String);
impl Visit for Visitor<'_> {
#[inline]
fn record_debug(&mut self, field: &Field, val: &dyn fmt::Debug) {
if field.name() == "message" {
write!(self.0, "{:?}", val).expect("stream error");
} else {
write!(self.0, " {}={:?}", field.name(), val).expect("stream error");
}
}
}
let meta = __CALLSITE.metadata();
let enabled = level_enabled!(LEVEL) && {
let interest = __CALLSITE.interest();
!interest.is_never() && __macro_support::__is_enabled(meta, interest)
};
if enabled {
Event::dispatch(meta, &vs);
}
__tracing_log!(LEVEL, __CALLSITE, &vs);
vs.record(&mut Visitor(&mut $out));
};
(visit)(valueset!(__CALLSITE.metadata().fields(), $($fields)+));
($crate::error::visit)(&mut $out, LEVEL, &__CALLSITE, &mut valueset!(__CALLSITE.metadata().fields(), $($fields)+));
($out).into()
}}
}
@ -192,3 +161,40 @@ macro_rules! err_lev {
$crate::tracing::Level::ERROR
};
}
use std::{fmt, fmt::Write};
use tracing::{
level_enabled, Callsite, Event, __macro_support, __tracing_log,
callsite::DefaultCallsite,
field::{Field, ValueSet, Visit},
Level,
};
struct Visitor<'a>(&'a mut String);
impl Visit for Visitor<'_> {
#[inline]
fn record_debug(&mut self, field: &Field, val: &dyn fmt::Debug) {
if field.name() == "message" {
write!(self.0, "{val:?}").expect("stream error");
} else {
write!(self.0, " {}={val:?}", field.name()).expect("stream error");
}
}
}
pub fn visit(out: &mut String, level: Level, __callsite: &'static DefaultCallsite, vs: &mut ValueSet<'_>) {
let meta = __callsite.metadata();
let enabled = level_enabled!(level) && {
let interest = __callsite.interest();
!interest.is_never() && __macro_support::__is_enabled(meta, interest)
};
if enabled {
Event::dispatch(meta, vs);
}
__tracing_log!(level, __callsite, vs);
vs.record(&mut Visitor(out));
}

View file

@ -6,8 +6,7 @@ mod serde;
use std::{any::Any, borrow::Cow, convert::Infallible, fmt, sync::PoisonError};
pub use self::log::*;
use crate::error;
pub use self::{err::visit, log::*};
#[derive(thiserror::Error)]
pub enum Error {