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