moduforge_transform/
step.rs1use std::sync::Arc;
2
3use moduforge_model::{node_pool::NodePool, schema::Schema};
4use std::fmt::Debug;
5
6use super::{draft::Draft, patch::Patch, transform::TransformError, ConcreteStep};
7
8pub trait Step: Send + Sync + Debug {
9 fn apply(
10 &self,
11 dart: &mut Draft,
12 schema: Arc<Schema>,
13 ) -> Result<StepResult, TransformError>;
14 fn to_concrete(&self) -> ConcreteStep;
15}
16
17#[derive(Debug, Clone)]
18pub struct StepResult {
19 pub doc: Option<Arc<NodePool>>,
20 pub failed: Option<String>,
21 pub patches: Vec<Patch>,
22}
23
24impl StepResult {
25 pub fn ok(
26 doc: Arc<NodePool>,
27 patches: Vec<Patch>,
28 ) -> Self {
29 StepResult { doc: Some(doc), failed: None, patches }
30 }
31
32 pub fn fail(message: String) -> Self {
33 StepResult { doc: None, failed: Some(message), patches: vec![] }
34 }
35}
36
37pub enum Steps {}