use crate::protocol::eval::EvalError; use crate::runtime2::*; use super::CompCtx; pub enum CompScheduling { Immediate, Requeue, Sleep, Exit, } /// Generic representation of a component (as viewed by a scheduler). pub(crate) trait Component { /// Called if the component is created by another component and the messages /// are being transferred between the two. fn adopt_message(&mut self, comp_ctx: &mut CompCtx, message: DataMessage); /// Called if the component receives a new message. The component is /// responsible for deciding where that messages goes. fn handle_message(&mut self, sched_ctx: &mut SchedulerCtx, comp_ctx: &mut CompCtx, message: Message); /// Called if the component's routine should be executed. The return value /// can be used to indicate when the routine should be run again. fn run(&mut self, sched_ctx: &mut SchedulerCtx, comp_ctx: &mut CompCtx) -> Result; }