moduforge_core/transform/
step.rs

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