greentic_flow/
lib.rs

1pub mod error;
2pub mod ir;
3pub mod loader;
4pub mod model;
5pub mod resolve;
6pub mod util;
7
8use crate::{
9    error::Result,
10    ir::{FlowIR, NodeIR, RouteIR},
11    model::FlowDoc,
12};
13use indexmap::IndexMap;
14
15/// Convert a `FlowDoc` into its compact intermediate representation.
16pub fn to_ir(flow: FlowDoc) -> Result<FlowIR> {
17    let mut nodes: IndexMap<String, NodeIR> = IndexMap::new();
18    for (id, node) in flow.nodes {
19        nodes.insert(
20            id,
21            NodeIR {
22                component: node.component,
23                payload_expr: node.payload,
24                routes: node
25                    .routing
26                    .into_iter()
27                    .map(|route| RouteIR {
28                        to: route.to,
29                        out: route.out.unwrap_or(false),
30                    })
31                    .collect(),
32            },
33        );
34    }
35
36    Ok(FlowIR {
37        id: flow.id,
38        flow_type: flow.flow_type,
39        start: flow.start,
40        parameters: flow.parameters,
41        nodes,
42    })
43}