diff_logger 0.1.0

Pretty diff logger for JSON values in rust
Documentation
use chrono::{DateTime, FixedOffset};
use serde_json::Value;

#[derive(Debug, Clone, PartialEq)]
pub struct Change<T> {
    pub before: T,
    pub after: T,
}

#[derive(Debug, Clone, PartialEq)]
pub enum ValueChange {
    Entries(Vec<FieldChange>),
    Value(Change<Value>),
    Number(Change<f64>),
    Date(Change<DateTime<FixedOffset>>),
    String(Change<String>),
    Bool(Change<bool>),
}

impl ValueChange {
    pub fn is_leaf(&self) -> bool {
        match &self {
            ValueChange::Entries(xs) => xs.len() == 0,
            _ => true,
        }
    }
}

#[derive(Debug, Clone, PartialEq)]
pub enum FieldContentChange {
    Deleted(Value),
    New(Value),
    Diff(ValueChange),
}

#[derive(Debug, Clone, PartialEq)]
pub struct FieldChange {
    pub name: String,
    pub headers: Vec<ValueChange>,
    pub content: FieldContentChange,
}

#[cfg(test)]
pub mod test_utils {
    use crate::types::{ ValueChange};
    use super::{FieldChange, FieldContentChange};
    
    pub fn object(fs: &[FieldChange]) -> ValueChange {
        ValueChange::Entries(fs.to_vec())
    }

    pub fn field(name: &str, ch: ValueChange) -> FieldChange {
        FieldChange {
            content: FieldContentChange::Diff(ch),
            name: name.to_owned(),
            headers: Vec::new(),
        }
    }
}