# `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. ```rust 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. ```rust 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](https://github.com/fprasx/peapod/blob/main/LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) - MIT license ([LICENSE-MIT](https://github.com/fprasx/peapod/blob/main/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.