zen_engine/nodes/custom/
mod.rs

1use crate::nodes::result::NodeResult;
2use crate::nodes::{NodeContext, NodeHandler};
3use zen_types::decision::CustomNodeContent;
4use zen_types::variable::Variable;
5
6pub use adapter::{
7    CustomDecisionNode, CustomNodeAdapter, CustomNodeRequest, DynamicCustomNode, NoopCustomNode,
8};
9
10mod adapter;
11
12#[derive(Debug, Clone)]
13pub struct CustomNodeHandler;
14
15pub type CustomNodeData = CustomNodeContent;
16pub type CustomNodeTrace = Variable;
17
18impl NodeHandler for CustomNodeHandler {
19    type NodeData = CustomNodeData;
20    type TraceData = CustomNodeTrace;
21
22    async fn handle(&self, ctx: NodeContext<Self::NodeData, Self::TraceData>) -> NodeResult {
23        let custom_node_request = CustomNodeRequest {
24            input: ctx.input.clone(),
25            node: CustomDecisionNode {
26                id: ctx.id.clone(),
27                name: ctx.name.clone(),
28                kind: ctx.node.kind.clone(),
29                config: ctx.node.config.clone(),
30            },
31        };
32
33        ctx.extensions
34            .custom_node()
35            .handle(custom_node_request)
36            .await
37    }
38}