daedalus_runtime/executor/
handler.rs

1use super::errors::NodeError;
2use crate::io::NodeIo;
3use crate::state::ExecutionContext;
4
5/// Handler abstraction for executing a node.
6///
7/// ```no_run
8/// use daedalus_runtime::executor::NodeHandler;
9/// use daedalus_runtime::io::NodeIo;
10/// use daedalus_runtime::state::ExecutionContext;
11///
12/// fn handler(
13///     _node: &daedalus_runtime::RuntimeNode,
14///     _ctx: &ExecutionContext,
15///     _io: &mut NodeIo,
16/// ) -> Result<(), daedalus_runtime::executor::NodeError> {
17///     Ok(())
18/// }
19///
20/// let _h: &dyn NodeHandler = &handler;
21/// ```
22pub trait NodeHandler: Send + Sync {
23    fn run(
24        &self,
25        node: &crate::plan::RuntimeNode,
26        ctx: &ExecutionContext,
27        io: &mut NodeIo,
28    ) -> Result<(), NodeError>;
29}
30
31impl<F> NodeHandler for F
32where
33    F: Fn(&crate::plan::RuntimeNode, &ExecutionContext, &mut NodeIo) -> Result<(), NodeError>
34        + Send
35        + Sync,
36{
37    fn run(
38        &self,
39        node: &crate::plan::RuntimeNode,
40        ctx: &ExecutionContext,
41        io: &mut NodeIo,
42    ) -> Result<(), NodeError> {
43        (self)(node, ctx, io)
44    }
45}