

# cset
Fine-grained and reversible struct transactions.
This crate offers a Track macro that structs can derive to generate the plumbing needed to precisely track changes to fields. Calling `Trackable::edit()` returns a `Draft` that stores edits separately from the underyling struct, such that no values are written.
When `.commit()` is called on the draft, edits are applied to the base struct. Each replaced value is returned to the caller as a `Change` in a `ChangeSet`. This changeset can then be re-applied to a struct of the same type, which replaces fields with values from the `ChangeSet`. This operation produces a new `ChangeSet`, allowing for the implementation of an undo-redo paradigm.
## Project status
This project is early in development and API changes should be expected.