fob_graph/memory/
graph.rs

1//! Core ModuleGraph structure and inner state.
2
3use std::sync::Arc;
4
5use parking_lot::RwLock;
6use rustc_hash::{FxHashMap as HashMap, FxHashSet as HashSet};
7
8use super::super::external_dep::ExternalDependency;
9use super::super::{Module, ModuleId};
10
11/// In-memory module dependency graph.
12///
13/// This implementation uses HashMaps for fast lookups and is fully synchronous.
14#[derive(Debug, Clone)]
15pub struct ModuleGraph {
16    pub(super) inner: Arc<RwLock<GraphInner>>,
17}
18
19#[derive(Debug, Clone, Default)]
20pub(super) struct GraphInner {
21    /// All modules indexed by ID (wrapped in Arc for cheap cloning)
22    pub modules: HashMap<ModuleId, Arc<Module>>,
23    /// Forward edges: module -> its dependencies
24    pub dependencies: HashMap<ModuleId, HashSet<ModuleId>>,
25    /// Reverse edges: module -> modules that depend on it
26    pub dependents: HashMap<ModuleId, HashSet<ModuleId>>,
27    /// Entry point modules
28    pub entry_points: HashSet<ModuleId>,
29    /// External dependencies
30    pub external_deps: HashMap<String, ExternalDependency>,
31}