moduforge_core/transform/
step.rs1use 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 {}