Expand description
§dagex
A pure Rust DAG executor supporting implicit node connections, branching, and config sweeps.
§Features
- Implicit Node Connections: Nodes are automatically connected based on execution order
- Branching: Create parallel execution paths with
.branch() - Config Sweeps: Use
.variants()to create configuration variations - DAG Optimization: Automatic inspection and optimization of execution paths
- Mermaid Visualization: Generate diagrams with
to_mermaid()
§Example
use dagex::{Graph, GraphData};
use std::collections::HashMap;
fn data_source(_: &HashMap<String, GraphData>) -> HashMap<String, GraphData> {
let mut result = HashMap::new();
result.insert("output".to_string(), GraphData::string("Hello, World!"));
result
}
fn processor(inputs: &HashMap<String, GraphData>) -> HashMap<String, GraphData> {
let mut result = HashMap::new();
if let Some(data) = inputs.get("input").and_then(|d| d.as_string()) {
result.insert("output".to_string(), GraphData::string(data.to_uppercase()));
}
result
}
let mut graph = Graph::new();
graph.add(data_source, Some("Source"), None, Some(vec![("output", "output")]));
graph.add(processor, Some("Processor"), Some(vec![("output", "input")]), Some(vec![("output", "output")]));
let dag = graph.build();Structs§
- Dag
- Directed Acyclic Graph representing the optimized execution plan
- Execution
Result - Execution result that tracks outputs per node and per branch
- Graph
- Graph builder for constructing graphs with implicit node connections
Enums§
- Graph
Data - GraphData enum supporting multiple data types
Type Aliases§
- Execution
Context - Execution context for storing variable values during graph execution
- Node
Function - Type alias for node execution functions using GraphData Takes GraphData ports as input, returns output ports
- NodeId
- Unique identifier for a node