1use serde::{Deserialize, Serialize};
2
3pub const SCHEMA_VERSION: u32 = 3;
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, PartialEq, Eq, Serialize, Deserialize, Default)]
99#[serde(rename_all = "snake_case")]
100pub enum Visibility {
101 #[default]
102 Private,
103 PubCrate,
104 Pub,
105}
106
107impl std::fmt::Display for Visibility {
108 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
109 match self {
110 Visibility::Pub => f.write_str("pub"),
111 Visibility::PubCrate => f.write_str("pub_crate"),
112 Visibility::Private => f.write_str("private"),
113 }
114 }
115}
116
117#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
121#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
122pub enum SolidHint {
123 Srp,
125 Ocp,
127 Lsp,
129 Isp,
131 Dip,
133}
134
135#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
137#[serde(rename_all = "snake_case")]
138pub enum DesignPattern {
139 Builder,
140 Factory,
141 Observer,
142 Strategy,
143 Decorator,
144 Singleton,
145 Repository,
146}
147
148#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
150#[serde(rename_all = "snake_case")]
151pub enum CodeSmell {
152 GodStruct,
154 LongMethod,
156 DeepNesting,
158 FatInterface,
160}