zen-engine 0.55.0

Business rules engine
Documentation
use crate::nodes::context::NodeContext;
use crate::nodes::result::NodeResult;
use crate::nodes::NodeError;
use serde::{Deserialize, Serialize};
use std::fmt::Debug;
use zen_types::decision::TransformAttributes;
use zen_types::variable::ToVariable;

pub trait NodeDataType: Clone + Debug + Serialize + for<'de> Deserialize<'de> {}
impl<T> NodeDataType for T where T: Clone + Debug + Serialize + for<'de> Deserialize<'de> {}

pub trait TraceDataType: Clone + Debug + Default + ToVariable {}
impl<T> TraceDataType for T where T: Clone + Debug + Default + ToVariable {}

pub trait NodeHandler: Clone {
    type NodeData: NodeDataType;
    type TraceData: TraceDataType;

    #[allow(unused_variables)]
    fn transform_attributes(
        &self,
        ctx: &NodeContext<Self::NodeData, Self::TraceData>,
    ) -> Option<TransformAttributes> {
        None
    }

    #[allow(unused_variables)]
    fn after_transform_attributes(
        &self,
        ctx: &NodeContext<Self::NodeData, Self::TraceData>,
    ) -> impl std::future::Future<Output = Result<(), NodeError>> {
        Box::pin(async { Ok(()) })
    }

    fn handle(
        &self,
        ctx: NodeContext<Self::NodeData, Self::TraceData>,
    ) -> impl std::future::Future<Output = NodeResult>;
}