moduforge_transform/
step.rs1use 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}