id_effect 0.4.0

Effect<A, E, R> (sync + async), capability DI, pipe — interpreter-style, no bundled executor
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Effect interpreter

[`Interpreter`](../../id_effect_fsm/src/interpreter.rs) registers effect factories keyed by `(state, event)`. Each factory returns a fresh [`Effect`](../../id_effect/src/kernel/effect.rs) (effects are not `Clone`).

```rust
use id_effect::{Effect, run_blocking};
use id_effect_fsm::{Interpreter, StateMachine, TransitionTable};

let interp = Interpreter::new().on_transition("idle", "tick", || {
    Effect::new(|_| Ok(()))
});
let mut m = StateMachine::new("idle", table);
interp.run(&mut m, ["tick"], ())?;
```

Use `run_blocking` at the application boundary — the same rule as other synchronous IO in `effect!` blocks.