1use serde::{Deserialize, Serialize};
2
3pub const SCHEMA_VERSION: u32 = 14;
8
9#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
11#[serde(rename_all = "snake_case")]
12pub enum NodeKind {
13 Folder,
14 File,
15 Module,
16 Struct,
17 Enum,
18 Trait,
20 Interface,
22 TypeAlias,
23 Function,
24 Method,
25 Property,
27 Constant,
28 Macro,
29 Annotation,
31 EnumMember,
33 Section,
36 Route,
39}
40
41impl std::fmt::Display for NodeKind {
42 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
43 let s = match self {
44 NodeKind::Folder => "folder",
45 NodeKind::File => "file",
46 NodeKind::Module => "module",
47 NodeKind::Struct => "struct",
48 NodeKind::Enum => "enum",
49 NodeKind::Trait => "trait",
50 NodeKind::Interface => "interface",
51 NodeKind::TypeAlias => "type_alias",
52 NodeKind::Function => "function",
53 NodeKind::Method => "method",
54 NodeKind::Property => "property",
55 NodeKind::Constant => "constant",
56 NodeKind::Macro => "macro",
57 NodeKind::Annotation => "annotation",
58 NodeKind::EnumMember => "enum_member",
59 NodeKind::Section => "section",
60 NodeKind::Route => "route",
61 };
62 f.write_str(s)
63 }
64}
65
66impl std::str::FromStr for NodeKind {
67 type Err = ();
68 fn from_str(s: &str) -> Result<Self, Self::Err> {
69 match s {
70 "folder" => Ok(NodeKind::Folder),
71 "file" => Ok(NodeKind::File),
72 "module" => Ok(NodeKind::Module),
73 "struct" => Ok(NodeKind::Struct),
74 "enum" => Ok(NodeKind::Enum),
75 "trait" => Ok(NodeKind::Trait),
76 "interface" => Ok(NodeKind::Interface),
77 "type_alias" => Ok(NodeKind::TypeAlias),
78 "function" => Ok(NodeKind::Function),
79 "method" => Ok(NodeKind::Method),
80 "property" => Ok(NodeKind::Property),
81 "constant" => Ok(NodeKind::Constant),
82 "macro" => Ok(NodeKind::Macro),
83 "annotation" => Ok(NodeKind::Annotation),
84 "enum_member" | "enum-member" => Ok(NodeKind::EnumMember),
85 "section" => Ok(NodeKind::Section),
86 "route" => Ok(NodeKind::Route),
87 _ => Err(()),
88 }
89 }
90}
91
92#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
94#[serde(rename_all = "snake_case")]
95pub enum EdgeKind {
96 Contains,
98 Calls,
100 Implements,
102 Inherits,
106 Uses,
108 Imports,
110 Annotated,
113 Throws,
115 References,
119 HandledBy,
123}
124
125impl std::fmt::Display for EdgeKind {
126 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
127 let s = match self {
128 EdgeKind::Contains => "contains",
129 EdgeKind::Calls => "calls",
130 EdgeKind::Implements => "implements",
131 EdgeKind::Inherits => "inherits",
132 EdgeKind::Uses => "uses",
133 EdgeKind::Imports => "imports",
134 EdgeKind::Annotated => "annotated",
135 EdgeKind::Throws => "throws",
136 EdgeKind::References => "references",
137 EdgeKind::HandledBy => "handled_by",
138 };
139 f.write_str(s)
140 }
141}
142
143#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
150#[serde(rename_all = "snake_case")]
151pub enum EdgeConfidence {
152 #[default]
154 Extracted,
155 Resolved,
158 Inferred,
160}
161
162impl std::fmt::Display for EdgeConfidence {
163 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
164 f.write_str(match self {
165 EdgeConfidence::Extracted => "extracted",
166 EdgeConfidence::Resolved => "resolved",
167 EdgeConfidence::Inferred => "inferred",
168 })
169 }
170}
171
172impl EdgeConfidence {
173 pub fn from_label(s: &str) -> Self {
175 match s {
176 "resolved" => EdgeConfidence::Resolved,
177 "inferred" => EdgeConfidence::Inferred,
178 _ => EdgeConfidence::Extracted,
179 }
180 }
181}
182
183#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
185#[serde(rename_all = "snake_case")]
186pub enum Visibility {
187 #[default]
188 Private,
189 PubCrate,
190 Pub,
191}
192
193impl std::fmt::Display for Visibility {
194 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
195 match self {
196 Visibility::Pub => f.write_str("pub"),
197 Visibility::PubCrate => f.write_str("pub_crate"),
198 Visibility::Private => f.write_str("private"),
199 }
200 }
201}
202
203impl std::str::FromStr for Visibility {
204 type Err = ();
205 fn from_str(s: &str) -> Result<Self, Self::Err> {
206 match s {
207 "pub" => Ok(Visibility::Pub),
208 "pub_crate" => Ok(Visibility::PubCrate),
209 "private" => Ok(Visibility::Private),
210 _ => Err(()),
211 }
212 }
213}
214
215#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
219#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
220pub enum SolidHint {
221 Srp,
223 Ocp,
225 Lsp,
227 Isp,
229 Dip,
231}
232
233#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
235#[serde(rename_all = "snake_case")]
236pub enum DesignPattern {
237 Builder,
238 Factory,
239 Observer,
240 Strategy,
241 Decorator,
242 Singleton,
243 Repository,
244}
245
246#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
248#[serde(rename_all = "snake_case")]
249pub enum CodeSmell {
250 GodStruct,
252 LongMethod,
254 DeepNesting,
256 FatInterface,
258}