zen_engine/nodes/
definition.rs

1use crate::nodes::context::NodeContext;
2use crate::nodes::result::NodeResult;
3use crate::nodes::NodeError;
4use serde::{Deserialize, Serialize};
5use std::fmt::Debug;
6use zen_types::decision::TransformAttributes;
7use zen_types::variable::ToVariable;
8
9pub trait NodeDataType: Clone + Debug + Serialize + for<'de> Deserialize<'de> {}
10impl<T> NodeDataType for T where T: Clone + Debug + Serialize + for<'de> Deserialize<'de> {}
11
12pub trait TraceDataType: Clone + Debug + Default + ToVariable {}
13impl<T> TraceDataType for T where T: Clone + Debug + Default + ToVariable {}
14
15pub trait NodeHandler: Clone {
16    type NodeData: NodeDataType;
17    type TraceData: TraceDataType;
18
19    #[allow(unused_variables)]
20    fn transform_attributes(
21        &self,
22        ctx: &NodeContext<Self::NodeData, Self::TraceData>,
23    ) -> Option<TransformAttributes> {
24        None
25    }
26
27    #[allow(unused_variables)]
28    fn after_transform_attributes(
29        &self,
30        ctx: &NodeContext<Self::NodeData, Self::TraceData>,
31    ) -> impl std::future::Future<Output = Result<(), NodeError>> {
32        Box::pin(async { Ok(()) })
33    }
34
35    fn handle(
36        &self,
37        ctx: NodeContext<Self::NodeData, Self::TraceData>,
38    ) -> impl std::future::Future<Output = NodeResult>;
39}