zen-engine 0.55.0

Business rules engine
Documentation
use crate::nodes::result::NodeResult;
use crate::nodes::{NodeContext, NodeHandler};
use zen_types::decision::CustomNodeContent;
use zen_types::variable::Variable;

pub use adapter::{
    CustomDecisionNode, CustomNodeAdapter, CustomNodeRequest, DynamicCustomNode, NoopCustomNode,
};

mod adapter;

#[derive(Debug, Clone)]
pub struct CustomNodeHandler;

pub type CustomNodeData = CustomNodeContent;
pub type CustomNodeTrace = Variable;

impl NodeHandler for CustomNodeHandler {
    type NodeData = CustomNodeData;
    type TraceData = CustomNodeTrace;

    async fn handle(&self, ctx: NodeContext<Self::NodeData, Self::TraceData>) -> NodeResult {
        let custom_node_request = CustomNodeRequest {
            input: ctx.input.clone(),
            node: CustomDecisionNode {
                id: ctx.id.clone(),
                name: ctx.name.clone(),
                kind: ctx.node.kind.clone(),
                config: ctx.node.config.clone(),
            },
        };

        ctx.extensions
            .custom_node()
            .handle(custom_node_request)
            .await
    }
}