5 releases

0.1.0 Nov 5, 2019
0.0.4 Nov 4, 2019
0.0.3 Nov 4, 2019
0.0.2 Nov 4, 2019
0.0.1 Nov 4, 2019

#18 in #redux

MIT/Apache

7KB
77 lines

Stores

Reducable stores inspired by Redux

[dependencies]
stores = "0.1.0"
#[derive(Default)]
struct Counter {
    v: u32,
}

enum Action {
    Increment,
    Decrement,
    Nothing,
}

impl Reduceable<Action> for Counter {
    fn reduce(state: State<Self>, action: &Action) -> State<Self> {
        let prev = &*state.lock();
        match action {
            Increment => {
                return State::new(Counter{
                    v:prev.v+1,
                    ..*prev
                })
            },
            Decrement => {
                return State::new(Counter{
                    v:prev.v-1,
                    ..*prev
                })
            }
        }
        state.clone()
    }
}

fn main() {
    let r = Store::<Counter,Action>::get().lock();
    r.watch(|state|{
        println!("state changed! {:?}", state.lock());
    });
    r.dispatch(&Action::Increment);
}

License

This project is licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in stores by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~170KB