aboutsummaryrefslogtreecommitdiff
path: root/rif/src/schema.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rif/src/schema.rs')
-rw-r--r--rif/src/schema.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/rif/src/schema.rs b/rif/src/schema.rs
new file mode 100644
index 0000000..28c1304
--- /dev/null
+++ b/rif/src/schema.rs
@@ -0,0 +1,38 @@
+use identity::Identity as Id;
+use std::collections::BTreeSet;
+
+/// A schema format backing a recipe set
+pub struct Schema<I, W>
+where
+ I: Ingredient,
+ W: Workstep,
+{
+ /// Set of ingredients present in a recipe
+ pub ingredients: BTreeSet<I>,
+ /// Set of allowed work-steps in a recipe
+ pub worksteps: BTreeSet<W>,
+}
+
+/// 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<()>;
+}