pub trait Module: MaybeSend + 'static {
// Required methods
fn name(&self) -> &'static str;
fn accepts(&self, tick: &Tick) -> bool;
fn handle(
&mut self,
tick: &Tick,
now_ms: u64,
out: &mut EffectSink,
) -> Result<(), CoreError>;
// Provided methods
fn on_start(&mut self, out: &mut EffectSink) -> Result<(), CoreError> { ... }
fn on_stop(&mut self, out: &mut EffectSink) -> Result<(), CoreError> { ... }
}Expand description
确定性业务模块的完整契约。
§实现约束(不可违反)
accepts和handle必须是纯函数(无 I/O,无 await,无 spawn)handle通过&mut EffectSink输出 Effect,不直接调用任何 port- 周期心跳:在
on_start吐ScheduleTimer{id, after_ms}, 在handle(Tick::Timer{id})重新 arm,实现无限循环心跳
Required Methods§
Provided Methods§
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".