Crate effect_cell
source ·Expand description
EffectCell
A container that runs an effect every time its data is mutated.
In essence, a slimed down implementation of the Observer pattern using Rust’s Fn
trait.
use effect_cell::EffectCell;
fn main() {
let mut effect_cell = EffectCell::new(0);
effect_cell.bind(|data| {println!("{data}");});
effect_cell.update(1);
// Prints "1"
}
Operator Passthrough
The XAssign
traits have been setup so that they can modify the internal data
without the need for a call through update_lambda
.
They will always call effects.
use effect_cell::EffectCell;
fn main() {
let mut effect_cell = EffectCell::new(0);
effect_cell.bind(|data| {println!("{data}");});
effect_cell += 1;
// Prints "1"
}
License
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 the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Structs
- A container that runs one or many effects on data mutation. The effect is run after data is updated as per the conventions of the Observer data structure. Effects are run in the order that they were bound to
EffectCell
in. - A container that runs one or many effects on data mutation. Effects are run either before or after data is updated depending on their
EffectOrder
Effects are run in the order that they were bound to eachEffectOrder
inOrderedEffectCell
.
Enums
- Represents whether an effect should be called before or after data is updated