1use serde::{Deserialize, Serialize};
2
3use crate::node::NodeId;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
6pub enum Relation {
7 Calls,
8 Uses,
9 Imports,
10 Contains,
11 Implements,
12 Extends,
13}
14
15impl Relation {
16 pub fn as_str(self) -> &'static str {
17 match self {
18 Self::Calls => "calls",
19 Self::Uses => "uses",
20 Self::Imports => "imports",
21 Self::Contains => "contains",
22 Self::Implements => "implements",
23 Self::Extends => "extends",
24 }
25 }
26}
27
28#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
31pub enum Evidence {
32 Structural,
34 Scope,
36 Import,
38 Scip,
40 Declared,
44 Dynamic,
49}
50
51impl Evidence {
52 pub fn as_str(self) -> &'static str {
53 match self {
54 Self::Structural => "structural",
55 Self::Scope => "scope",
56 Self::Import => "import",
57 Self::Scip => "scip",
58 Self::Declared => "declared",
59 Self::Dynamic => "dynamic",
60 }
61 }
62
63 pub fn confidence(self) -> Confidence {
66 match self {
67 Self::Structural | Self::Scip | Self::Declared => Confidence::Certain,
68 Self::Scope | Self::Import | Self::Dynamic => Confidence::Inferred,
69 }
70 }
71}
72
73#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
74pub enum Confidence {
75 Certain,
76 Inferred,
77}
78
79#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
82pub struct Edge {
83 pub src: NodeId,
84 pub dst: NodeId,
85 pub relation: Relation,
86 pub evidence: Evidence,
87 pub confidence: Confidence,
88}