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 graph
15 .file_reexports
16 .insert(file_ir.file.clone(), file_ir.re_exports.clone());
17
18 let mut added_symbol_ids = Vec::new();
19 for symbol in &file_ir.symbols {
20 graph.add_symbol(symbol.clone());
21 added_symbol_ids.push(symbol.id.clone());
22 }
23
24 let mut added_relationships = 0usize;
25 for relationship in &file_ir.relationships {
26 graph.add_relationship(relationship);
27 added_relationships += 1;
28 }
29
30 added_symbol_ids.sort();
31
32 IncrementalUpdateResult {
33 removed_symbol_ids,
34 added_symbol_ids,
35 removed_relationships,
36 added_relationships,
37 }
38}