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