use identity::Identity as Id; use std::collections::BTreeSet; /// A schema format backing a recipe set pub struct Schema where I: Ingredient, W: Workstep, { /// Set of ingredients present in a recipe pub ingredients: BTreeSet, /// Set of allowed work-steps in a recipe pub worksteps: BTreeSet, } /// A string-tagged ingredient in a recipe pub trait Ingredient { /// Get a human readable ingredient name fn name(&self) -> String; /// Get the ingredient slug fn slug(&self) -> String; /// A machine-efficient, random ID fn id(&self) -> Id; } /// An execution step pub trait Workstep { /// Get a human readable workstep name fn name(&self) -> String; /// Get the workstep slug fn slug(&self) -> String; /// Get the human readable workstep description fn description(&self) -> String; /// A machine-efficient, random ID fn id(&self) -> Id; /// Execute some custom code for the step fn run(&self) -> Option<()>; }