Restorable: an iterator adapter for saving and restoring iterator state

This is ideal for writing lexers and parsers where backtracking may be required.

Usage

  1. Adapter

```rs use restorable::RestorableIter;

[test]

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); } ```

  1. Trait

```rs use restorable::Restorable;

[test]

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); } ```

Installation

Add restorable under [dependecies] with the appropriate version number in your cargo.toml.

[dependencies] restorable = "^MAJOR.MINOR"

Changelog

0.2.0 - Added clear to stop saving and clear the buffer.