This is ideal for writing lexers and parsers where backtracking may be required.
```rs use restorable::RestorableIter;
fn testrestorablenew() { let mut iterator = RestorableIter::new(0..4); asserteq!(iterator.next(), Some(0)); asserteq!(iterator.next(), Some(1)); iterator.save(); asserteq!(iterator.next(), Some(2)); asserteq!(iterator.next(), Some(3)); iterator.restore(); asserteq!(iterator.next(), Some(2)); asserteq!(iterator.next(), Some(3)); assert_eq!(iterator.next(), None); } ```
```rs use restorable::Restorable;
fn testiterrestorable() { let mut iterator = (0..4).iterrestorable(); asserteq!(iterator.next(), Some(0)); asserteq!(iterator.next(), Some(1)); iterator.save(); asserteq!(iterator.next(), Some(2)); asserteq!(iterator.next(), Some(3)); iterator.restore(); asserteq!(iterator.next(), Some(2)); asserteq!(iterator.next(), Some(3)); asserteq!(iterator.next(), None); } ```
Add restorable
under [dependecies]
with the appropriate version number in your cargo.toml.
[dependencies]
restorable = "^MAJOR.MINOR"
0.2.0 - Added clear
to stop saving and clear the buffer.