txn_lock

A futures-aware read-write lock for Rust which supports transaction-specific versioning

Example: ```rust use futures::executor::blockon; use txnlock::*;

let lock = TxnLock::new(0, "zero"); { let mut guard = lock.try_write(&1).expect("write lock"); *guard = "one"; }

block_on(lock.commit(&1));

asserteq!(*lock.tryread(&0).expect("old value"), "zero"); asserteq!(*lock.tryread(&1).expect("current value"), "one"); asserteq!(*lock.tryread_exclusive(&2).expect("new value"), "one");

lock.rollback(&2);

{ let mut guard = lock.try_write(&3).expect("write lock"); *guard = "three"; }

lock.finalize(&2);

asserteq!(lock.tryread(&0).unwraperr(), Error::Outdated); asserteq!(lock.try_read(&2).expect("old value"), "one"); assert_eq!(lock.tryread(&3).expect("current value"), "three"); asserteq!(lock.tryread(&4).unwraperr(), Error::WouldBlock); ```