state-macro 0.1.1

Syntax sugar for stateful functions
Documentation
use state_macro::stateful_expr;
use std::cell::RefCell;
use std::rc::Rc;

type State = Rc<RefCell<u8>>;

fn inc(state: State) -> u8 {
    let mut i = state.borrow_mut();
    *i += 1;
    *i
}

// pass state into functions with the expression `state.clone()`.
#[stateful_expr(State, state.clone())]
fn inc_twice() -> u8 {
    ::inc() + ::inc()
}

fn main() {
    let state = Rc::new(RefCell::new(0u8));
    let result = inc_twice(state);
    println!("{}", result);
    assert_eq!(result, 3);
}