slog_struct_diff/
lib.rs

1extern crate slog;
2extern crate struct_diff;
3
4use struct_diff::{Diff, Difference};
5use slog::{KV, Result, Record, Serializer};
6
7pub struct Differences<'a>(pub Vec<SlogDifference<'a>>);
8pub struct SlogDifference<'a>(pub Difference<'a>);
9
10impl<'a> KV for SlogDifference<'a> {
11
12    fn serialize(
13        &self,
14        _record: &Record,
15        serializer: &mut Serializer,
16    ) -> Result {
17        serializer.emit_str("field", self.0.field.as_str())?;
18        serializer.emit_str("left", format!("{:?}", self.0.left).as_str())?;
19        serializer.emit_str("right", format!("{:?}", self.0.right).as_str())?;
20        Ok(())
21    }
22}
23
24impl<'a> KV for Differences<'a> {
25    fn serialize(
26        &self,
27        _record: &Record,
28        serializer: &mut Serializer,
29    ) -> Result {
30        for (index, item) in self.0.iter().enumerate() {
31            serializer.emit_usize("field_number", index)?;
32            item.serialize(_record, serializer)?;
33        }
34        Ok(())
35    }
36}
37