Skip to main content

graphyn_core/
incremental.rs

1use 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}