Build Status

contrail

Usage

Add this to your Cargo.toml:

toml [dependencies] contrail = "0.1"

Example usage:

```rust extern crate contrail;

use contrail::{Stored, TrailBuilder, Trailed};

fn main() { // setup the trail let mut builder = TrailBuilder::new(); let trailedcounter = Trailed::new(&mut builder, 0); let storedcounter = Stored::new(&mut builder, 0); let mut trail = builder.finish();

// push a new level onto the trail
trail.new_level();

// increment each counter
trailed_counter.update(&mut trail, |x| x + 1);
stored_counter.update(&mut trail, |x| x + 1);
assert_eq!(trailed_counter.get(&trail), 1);
assert_eq!(stored_counter.get(&trail), 1);

// pop the previous level from the trail
trail.undo_level();

// the trailed counter is reset to its value when new_level() was called
// the stored counter is unchanged
assert_eq!(trailed_counter.get(&trail), 0);
assert_eq!(stored_counter.get(&trail), 1);

} ```