moduforge_transform/
step.rs

1use std::{any::Any, sync::Arc};
2
3use moduforge_model::{schema::Schema, tree::Tree};
4use std::fmt::Debug;
5
6use super::transform::TransformError;
7
8pub trait Step: Any + Send + Sync + Debug + 'static {
9    fn name(&self) -> String;
10    fn apply(
11        &self,
12        dart: &mut Tree,
13        schema: Arc<Schema>,
14    ) -> Result<StepResult, TransformError>;
15    fn serialize(&self) -> Option<Vec<u8>>;
16}
17impl dyn Step {
18    pub fn downcast_ref<E: Step>(&self) -> Option<&E> {
19        <dyn Any>::downcast_ref::<E>(self)
20    }
21}
22
23#[derive(Debug, Clone)]
24pub struct StepResult {
25    pub failed: Option<String>,
26}
27
28impl StepResult {
29    pub fn ok() -> Self {
30        StepResult { failed: None }
31    }
32
33    pub fn fail(message: String) -> Self {
34        StepResult { failed: Some(message) }
35    }
36}