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
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
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
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