2 unstable releases

Uses old Rust 2015

0.2.3 Feb 6, 2017
0.1.0 Feb 2, 2017

#11 in #acid

Apache-2.0

7KB
149 lines

acid-state

rust transactional state library

#[macro_use] extern crate acid-state;

#[derive(Debug, RustcEncodable, RustcDecodable)]
struct A {
  i: u64,
}

acid_state! {
  pub a: A = A { i: 0 };
}

fn main() {
  println!("a initialized or loaded from disk is {}", *a);
  acid! {
    a.i += 1
  }
  println!("a is now {}", *a);
}

lib.rs:

acid-state adds durable transaction support to any serializable structure. Transactional state.

Examples

#[macro_use]
extern crate acid_state;
#[macro_use]
extern crate lazy_static;
extern crate rustc_serialize;

use std::collections::HashMap;

#[derive(Debug, RustcDecodable, RustcEncodable)]
struct Cs {
   v: u64,
}

acid_state! {
   A: HashMap<String, u64> = HashMap::new();
   B: u64 = 0;
   C: Cs = Cs {
       v: 0
   };
}

 let key = "yo".to_owned();
 acid! {
     (A => a, B => b, C => c) => {
         // A, B, C have been pulled off disk
         let mut current = a.entry(key).or_insert(0);
         **b += 1;
         *current += 1;
         c.v += 1;
         println!("a is now {:?}", current);
         println!("b is now {:?}", **b);
         println!("c is now {:?}", c.v);
         // new values of A, B, C are now synced on disk
     }
 };

Dependencies

~1.5MB
~28K SLoC