use serde::{Deserialize, Serialize};
pub const SCHEMA_VERSION: u32 = 3;
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum NodeKind {
Folder,
File,
Module,
Struct,
Enum,
Trait,
Interface,
TypeAlias,
Function,
Method,
Property,
Constant,
Macro,
Annotation,
EnumMember,
}
impl std::fmt::Display for NodeKind {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let s = match self {
NodeKind::Folder => "folder",
NodeKind::File => "file",
NodeKind::Module => "module",
NodeKind::Struct => "struct",
NodeKind::Enum => "enum",
NodeKind::Trait => "trait",
NodeKind::Interface => "interface",
NodeKind::TypeAlias => "type_alias",
NodeKind::Function => "function",
NodeKind::Method => "method",
NodeKind::Property => "property",
NodeKind::Constant => "constant",
NodeKind::Macro => "macro",
NodeKind::Annotation => "annotation",
NodeKind::EnumMember => "enum_member",
};
f.write_str(s)
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum EdgeKind {
Contains,
Calls,
Implements,
Inherits,
Uses,
Imports,
Annotated,
Throws,
}
impl std::fmt::Display for EdgeKind {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let s = match self {
EdgeKind::Contains => "contains",
EdgeKind::Calls => "calls",
EdgeKind::Implements => "implements",
EdgeKind::Inherits => "inherits",
EdgeKind::Uses => "uses",
EdgeKind::Imports => "imports",
EdgeKind::Annotated => "annotated",
EdgeKind::Throws => "throws",
};
f.write_str(s)
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum Visibility {
#[default]
Private,
PubCrate,
Pub,
}
impl std::fmt::Display for Visibility {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Visibility::Pub => f.write_str("pub"),
Visibility::PubCrate => f.write_str("pub_crate"),
Visibility::Private => f.write_str("private"),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum SolidHint {
Srp,
Ocp,
Lsp,
Isp,
Dip,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum DesignPattern {
Builder,
Factory,
Observer,
Strategy,
Decorator,
Singleton,
Repository,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum CodeSmell {
GodStruct,
LongMethod,
DeepNesting,
FatInterface,
}