diffo 0.2.0

Semantic diffing for Rust structs via serde
Documentation
//! Basic diffing example

use diffo::diff;
use serde::Serialize;

#[derive(Serialize)]
struct User {
    id: u64,
    name: String,
    email: String,
    active: bool,
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let old = User {
        id: 1,
        name: "Alice".into(),
        email: "alice@old.com".into(),
        active: true,
    };

    let new = User {
        id: 1,
        name: "Alice Smith".into(),
        email: "alice@new.com".into(),
        active: false,
    };

    let diff = diff(&old, &new)?;

    println!("=== Pretty Format ===");
    println!("{}", diff.to_pretty());

    println!("\n=== JSON Format ===");
    println!("{}", diff.to_json()?);

    println!("\n=== JSON Patch Format ===");
    println!("{}", diff.to_json_patch()?);

    println!("\n=== Markdown Format ===");
    println!("{}", diff.to_markdown()?);

    Ok(())
}