Stores
Reducable stores inspired by Redux
toml
[dependencies]
stores = "0.1.0"
```rust
[derive(Default)]
struct Counter {
v: u32,
}
enum Action {
Increment,
Decrement,
Nothing,
}
impl Reduceable for Counter {
fn reduce(state: State, action: &Action) -> State {
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::::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.