Skip to main content

jellyflow_runtime/runtime/lookups/
rebuild.rs

1use super::{EdgeLookupEntry, HandleConnection, NodeGraphLookups, NodeLookupEntry};
2use jellyflow_core::core::{EdgeId, EdgeKind, EdgeReconnectable, Graph, NodeId};
3use jellyflow_core::ops::EdgeEndpoints;
4
5impl NodeGraphLookups {
6    pub fn rebuild_from(&mut self, graph: &Graph) {
7        self.node_lookup.clear();
8        self.edge_lookup.clear();
9        self.connection_lookup.clear();
10
11        for (id, node) in &graph.nodes {
12            self.node_lookup
13                .insert(*id, NodeLookupEntry::from_node(node));
14        }
15
16        for (id, edge) in &graph.edges {
17            let endpoints = EdgeEndpoints::from_edge(edge);
18            let Some((entry, conn)) = Self::edge_lookup_entry_from_graph(
19                graph,
20                *id,
21                edge.kind,
22                endpoints,
23                edge.reconnectable,
24            ) else {
25                continue;
26            };
27
28            self.edge_lookup.insert(*id, entry);
29            self.add_edge_connection(conn);
30        }
31    }
32
33    pub(super) fn edge_lookup_entry_from_graph(
34        graph: &Graph,
35        id: EdgeId,
36        kind: EdgeKind,
37        endpoints: EdgeEndpoints,
38        reconnectable: Option<EdgeReconnectable>,
39    ) -> Option<(EdgeLookupEntry, HandleConnection)> {
40        let from_port = graph.ports.get(&endpoints.from)?;
41        let to_port = graph.ports.get(&endpoints.to)?;
42        let entry = EdgeLookupEntry::with_parts(
43            kind,
44            endpoints,
45            from_port.node,
46            to_port.node,
47            reconnectable,
48        );
49        let conn = HandleConnection::from_edge_lookup(id, entry);
50        Some((entry, conn))
51    }
52
53    pub(super) fn insert_node_lookup_from_graph(&mut self, graph: &Graph, id: NodeId) -> bool {
54        let Some(node) = graph.nodes.get(&id) else {
55            return false;
56        };
57        self.node_lookup
58            .insert(id, NodeLookupEntry::from_node(node));
59        true
60    }
61}