zen_engine/nodes/
definition.rs1use 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}