structdiff
A lightweight, zero-dependency struct diffing library which allows changed fields to be collected and applied. Derive Difference
on a struct, then use the StructDiff
trait to make and apply diffs.
Example:
use ;
let first = Example ;
let second = Example ;
let diffs = second.diff;
// diffs is now a Vec of differences, with length
// equal to number of changed/unskipped fields
assert_eq!;
let diffed = first.apply;
// diffed is now equal to second, except for skipped field
assert_eq!;
assert_eq!;
assert_ne!;
For more examples take a look at integration tests
Derive macro attributes
#[difference(skip)]
- Do not consider this field when creating a diff#[difference(recurse)]
- Generate a StructDiff for this field when creating a diff rather than cloning entire instance
Optional features
- [
nanoserde
,serde
] - Serialization ofDifference
derived associated types
Development status
This is being actively worked on. PRs will be accepted for either more tests or functionality.