#![cfg_attr(coverage_nightly, coverage(off))]
use rustc_hash::{FxHashMap, FxHashSet};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DependencyGraph {
pub nodes: FxHashMap<String, NodeInfo>,
pub edges: Vec<Edge>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NodeInfo {
pub id: String,
pub label: String,
pub node_type: NodeType,
pub file_path: String,
pub line_number: usize,
pub complexity: u32,
#[serde(default)]
pub metadata: FxHashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct Edge {
pub from: String,
pub to: String,
pub edge_type: EdgeType,
pub weight: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum NodeType {
Function,
Class,
Module,
Trait,
Interface,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub enum EdgeType {
Calls,
Imports,
Inherits,
Implements,
Uses,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub enum DagType {
CallGraph,
ImportGraph,
Inheritance,
FullDependency,
}
include!("dag_impls.rs");
include!("dag_tests.rs");