diff_json 0.1.0

A powerful JSON diff library for Rust
Documentation
# diff_json

A powerful and flexible JSON diff library for Rust that helps you compare two JSON values and identify differences.

## Features

- **Comprehensive Diff Detection**: Detects added, removed, and modified fields in JSON objects
- **Array Comparison**: Compare arrays with optional order-insensitive matching
- **Nested Structure Support**: Handles deeply nested JSON objects and arrays
- **Multiple Output Formats**: Format diffs as plain text, JSON, or compact summaries
- **Easy-to-Use API**: Simple and intuitive API for quick integration
- **Zero Dependencies**: Minimal external dependencies (only serde and serde_json)

## Installation

Add this to your `Cargo.toml`:

```toml
[dependencies]
diff_json = "0.1.0"
```

## Usage

### Basic Example

```rust
use diff_json::{compare_json, DiffFormatter};

let json1 = r#"{"name": "Alice", "age": 30}"#;
let json2 = r#"{"name": "Alice", "age": 31}"#;

let diffs = compare_json(json1, json2).unwrap();

let formatter = DiffFormatter::new();
println!("{}", formatter.format(&diffs));
```

### Working with Values

```rust
use diff_json::{compare_values, JsonDiff};
use serde_json::json;

let v1 = json!({"name": "Alice", "age": 30});
let v2 = json!({"name": "Bob", "age": 31});

let diffs = compare_values(&v1, &v2);
for diff in diffs {
    println!("{}", diff);
}
```

### Array Comparison with Order Ignored

```rust
use diff_json::JsonDiff;
use serde_json::json;

let v1 = json!([1, 2, 3]);
let v2 = json!([3, 2, 1]);

let differ = JsonDiff::new().ignore_order(true);
let diffs = differ.diff(&v1, &v2);
// diffs will be empty since arrays contain the same elements
```

### Different Output Formats

```rust
use diff_json::{compare_values, DiffFormatter};
use serde_json::json;

let v1 = json!({"name": "Alice"});
let v2 = json!({"name": "Bob"});

let diffs = compare_values(&v1, &v2);
let formatter = DiffFormatter::new();

// Plain text format
println!("{}", formatter.format(&diffs));

// Compact format
println!("{}", formatter.format_compact(&diffs));

// JSON format
println!("{}", formatter.format_json(&diffs));
```

## API Reference

### `compare_json(json1: &str, json2: &str) -> Result<Vec<Diff>, String>`

Compare two JSON strings and return a list of differences.

### `compare_values(v1: &Value, v2: &Value) -> Vec<Diff>`

Compare two `serde_json::Value` instances and return a list of differences.

### `JsonDiff`

Main diff engine with configurable options.

- `new()`: Create a new `JsonDiff` instance
- `ignore_order(bool)`: Set whether array comparison should ignore order
- `diff(v1: &Value, v2: &Value) -> Vec<Diff>`: Compare two values

### `DiffFormatter`

Format diff results in various styles.

- `new()`: Create a new formatter
- `indent(&str)`: Set indentation for formatted output
- `show_values(bool)`: Control whether to show values in output
- `format(&[Diff]) -> String`: Format diffs as plain text
- `format_compact(&[Diff]) -> String`: Format diffs in compact style
- `format_json(&[Diff]) -> String`: Format diffs as JSON
- `format_colored(&[Diff]) -> String`: Format diffs with color indicators

### `Diff`

Represents a single difference between two JSON values.

- `path: String`: JSON path to the changed element
- `diff_type: DiffType`: Type of change (Added, Removed, Modified, Moved)
- `old_value: Option<Value>`: Original value (if applicable)
- `new_value: Option<Value>`: New value (if applicable)

## License

This project is licensed under either of:

- MIT License ([LICENSE-MIT]LICENSE-MIT or http://opensource.org/licenses/MIT)
- Apache License, Version 2.0 ([LICENSE-APACHE]LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)

at your option.

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

## Examples

See the `examples` directory for more usage examples.

## Testing

Run tests with:

```bash
cargo test
```

## License

MIT OR Apache-2.0