Skip to main content

code_repo_wiki/model/
edge.rs

1use petgraph::stable_graph::EdgeIndex;
2use serde::{Deserialize, Serialize};
3
4use super::node::NodeId;
5
6/// 边 ID(映射到 petgraph 的 EdgeIndex)
7pub type EdgeId = EdgeIndex<u32>;
8
9/// 关系边
10#[derive(Debug, Clone, Serialize, Deserialize)]
11pub struct CodeEdge {
12    pub id: EdgeId,
13    pub kind: EdgeKind,
14    pub source: NodeId,
15    pub target: NodeId,
16    /// 关系权重(0.0~1.0),用于影响传播和聚类
17    pub weight: f64,
18    /// 位置信息(如导入语句所在行)
19    pub location: Option<(usize, usize)>,
20}
21
22/// 关系类型
23#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
24pub enum EdgeKind {
25    /// 包含关系(Project → Module → File → Entity)
26    Contains,
27    /// 调用关系(函数 A → 函数 B)
28    Calls,
29    /// 导入/引用关系(文件 → 模块/文件)
30    Imports,
31    /// 实现关系(Impl → Trait)
32    Implements,
33}
34
35impl EdgeKind {
36    pub fn as_str(&self) -> &'static str {
37        match self {
38            EdgeKind::Contains => "contains",
39            EdgeKind::Calls => "calls",
40            EdgeKind::Imports => "imports",
41            EdgeKind::Implements => "implements",
42        }
43    }
44
45}