moduforge_transform/
step.rs

1use 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 {}