pub struct KvDisplay<'kvs> {
kv: &'kvs dyn log::kv::Source,
}
impl<'kvs> KvDisplay<'kvs> {
pub fn new(kv: &'kvs dyn log::kv::Source) -> Self {
Self { kv }
}
}
impl std::fmt::Display for KvDisplay<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
let mut visitor = KvWriter { writer: f };
self.kv.visit(&mut visitor).ok();
Ok(())
}
}
struct KvWriter<'a, 'kvs> {
writer: &'kvs mut std::fmt::Formatter<'a>,
}
impl<'a, 'kvs> log::kv::Visitor<'kvs> for KvWriter<'a, 'kvs> {
fn visit_pair(
&mut self,
key: log::kv::Key<'kvs>,
value: log::kv::Value<'kvs>,
) -> Result<(), log::kv::Error> {
write!(self.writer, " {key}={value}")?;
Ok(())
}
}