jellyflow_runtime/runtime/lookups/
rebuild.rs1use 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}