## Module replace

Source
Expand description

A small module giving you a simple container that allows easy and cheap replacement of parts of its content, with the ability to commit or rollback pending changes.

Create a new `Data` struct with some initial set of code, then record changes with `Data::replace_range`, which will validate that the changes do not conflict with one another. At any time, you can “checkpoint” the current changes with `Data::commit` or roll them back (perhaps due to a conflict) with `Data::restore`. When you’re done, use `Data::to_vec` to merge the original data with the changes.

## §Notes

The `Data::to_vec` method includes uncommitted changes, if present. The reason for including uncommitted changes is that typically, once you’re calling those, you’re done with edits and will be dropping the `Data` struct in a moment. In this case, requiring an extra call to `commit` would be unnecessary work. Of course, there’s no harm in calling `commit`—it’s just not strictly necessary.

Put another way, the main point of `commit` is to checkpoint a set of known-good changes before applying additional sets of as-of-yet unvalidated changes. If no future changes are expected, you aren’t required to pay the cost of `commit`. If you want to discard uncommitted changes, simply call `Data::restore` first.

## Structs§

Data
  A container that allows easily replacing chunks of its data.
Span 🔒
  Data that should replace a particular range of the original.