use super::model::{
AutomatonContext, AutomatonError, AutomatonExecutionOutput, AutomatonObjective, AutomatonPlan,
};
pub trait AutomatonEngine: Send + Sync {
fn id(&self) -> &'static str;
fn plan(
&self,
objective: &AutomatonObjective,
ctx: &AutomatonContext,
) -> Result<AutomatonPlan, AutomatonError>;
fn execute(
&self,
plan: &AutomatonPlan,
ctx: &AutomatonContext,
) -> Result<AutomatonExecutionOutput, AutomatonError>;
}