1use serde::{Deserialize, Serialize};
2
3pub const SCHEMA_VERSION: u32 = 11;
6
7#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
9#[serde(rename_all = "snake_case")]
10pub enum NodeKind {
11 Folder,
12 File,
13 Module,
14 Struct,
15 Enum,
16 Trait,
18 Interface,
20 TypeAlias,
21 Function,
22 Method,
23 Property,
25 Constant,
26 Macro,
27 Annotation,
29 EnumMember,
31}
32
33impl std::fmt::Display for NodeKind {
34 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
35 let s = match self {
36 NodeKind::Folder => "folder",
37 NodeKind::File => "file",
38 NodeKind::Module => "module",
39 NodeKind::Struct => "struct",
40 NodeKind::Enum => "enum",
41 NodeKind::Trait => "trait",
42 NodeKind::Interface => "interface",
43 NodeKind::TypeAlias => "type_alias",
44 NodeKind::Function => "function",
45 NodeKind::Method => "method",
46 NodeKind::Property => "property",
47 NodeKind::Constant => "constant",
48 NodeKind::Macro => "macro",
49 NodeKind::Annotation => "annotation",
50 NodeKind::EnumMember => "enum_member",
51 };
52 f.write_str(s)
53 }
54}
55
56#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
58#[serde(rename_all = "snake_case")]
59pub enum EdgeKind {
60 Contains,
62 Calls,
64 Implements,
66 Inherits,
70 Uses,
72 Imports,
74 Annotated,
77 Throws,
79}
80
81impl std::fmt::Display for EdgeKind {
82 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
83 let s = match self {
84 EdgeKind::Contains => "contains",
85 EdgeKind::Calls => "calls",
86 EdgeKind::Implements => "implements",
87 EdgeKind::Inherits => "inherits",
88 EdgeKind::Uses => "uses",
89 EdgeKind::Imports => "imports",
90 EdgeKind::Annotated => "annotated",
91 EdgeKind::Throws => "throws",
92 };
93 f.write_str(s)
94 }
95}
96
97#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
102#[serde(rename_all = "snake_case")]
103pub enum EdgeConfidence {
104 #[default]
106 Extracted,
107 Inferred,
109}
110
111impl std::fmt::Display for EdgeConfidence {
112 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
113 f.write_str(match self {
114 EdgeConfidence::Extracted => "extracted",
115 EdgeConfidence::Inferred => "inferred",
116 })
117 }
118}
119
120impl EdgeConfidence {
121 pub fn from_label(s: &str) -> Self {
123 match s {
124 "inferred" => EdgeConfidence::Inferred,
125 _ => EdgeConfidence::Extracted,
126 }
127 }
128}
129
130#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
132#[serde(rename_all = "snake_case")]
133pub enum Visibility {
134 #[default]
135 Private,
136 PubCrate,
137 Pub,
138}
139
140impl std::fmt::Display for Visibility {
141 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
142 match self {
143 Visibility::Pub => f.write_str("pub"),
144 Visibility::PubCrate => f.write_str("pub_crate"),
145 Visibility::Private => f.write_str("private"),
146 }
147 }
148}
149
150#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
154#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
155pub enum SolidHint {
156 Srp,
158 Ocp,
160 Lsp,
162 Isp,
164 Dip,
166}
167
168#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
170#[serde(rename_all = "snake_case")]
171pub enum DesignPattern {
172 Builder,
173 Factory,
174 Observer,
175 Strategy,
176 Decorator,
177 Singleton,
178 Repository,
179}
180
181#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
183#[serde(rename_all = "snake_case")]
184pub enum CodeSmell {
185 GodStruct,
187 LongMethod,
189 DeepNesting,
191 FatInterface,
193}