graphyn_core/
incremental.rs1use crate::graph::GraphynGraph;
2use crate::ir::FileIR;
3
4pub struct IncrementalUpdateResult {
5 pub removed_symbol_ids: Vec<String>,
6 pub added_symbol_ids: Vec<String>,
7 pub removed_relationships: usize,
8 pub added_relationships: usize,
9}
10
11pub fn replace_file_ir(graph: &mut GraphynGraph, file_ir: &FileIR) -> IncrementalUpdateResult {
12 let removed_relationships = graph.remove_relationships_in_file(&file_ir.file);
13 let removed_symbol_ids = graph.remove_file(&file_ir.file);
14
15 let mut added_symbol_ids = Vec::new();
16 for symbol in &file_ir.symbols {
17 graph.add_symbol(symbol.clone());
18 added_symbol_ids.push(symbol.id.clone());
19 }
20
21 let mut added_relationships = 0usize;
22 for relationship in &file_ir.relationships {
23 graph.add_relationship(relationship);
24 added_relationships += 1;
25 }
26
27 added_symbol_ids.sort();
28
29 IncrementalUpdateResult {
30 removed_symbol_ids,
31 added_symbol_ids,
32 removed_relationships,
33 added_relationships,
34 }
35}