Crate transactional_iterator
source ·Expand description
A Transaction can be used to make changes to an iterator and only apply the changes if the
transaction is committed. When the Transaction is aborted, the changes are discarded. This
is useful for implementing backtracking searches, parsers, undo functionality, unlimited
peeking and more.
The original iterator must implement ‘Clone’ to be useable with the transactional iterator.
§Policies
Transactions can be created with 3 different policies:
Panic:
Will panic on drop if not committed or aborted.Abort:
Will abort changes on drop or panic.AutoCommit:
Will commit changes on drop or panic.
§Example
use transactional_iterator::{Transaction, Panic};
let mut iter = vec![1, 2, 3].into_iter();
let mut transaction = Transaction::new(&mut iter, Panic);
// iterate within the transaction
assert_eq!(transaction.next(), Some(1));
assert_eq!(transaction.next(), Some(2));
// Commit the transaction
transaction.commit();
// The changes are now applied
assert_eq!(iter.next(), Some(3));Structs§
- The policy that tags a transaction to roll back changes on drop or panic.
- The policy that tags a transaction to auto commit changes on drop or panic.
- The policy that tags a transaction to panic on drop.
- A Transaction refers to another iterator and allows to commit or abort changes made to the iterator.
Traits§
- A trait to check if a (return) value signifies success. This trait is implemented for
Option,Result,booland(). This can be implemented in user code. - A trait for the three policies. This allows user code to be generic over the policy.