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