use serde::{Deserialize, Serialize};
pub const SCHEMA_VERSION: u32 = 14;
#[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,
Section,
}
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",
NodeKind::Section => "section",
};
f.write_str(s)
}
}
impl std::str::FromStr for NodeKind {
type Err = ();
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"folder" => Ok(NodeKind::Folder),
"file" => Ok(NodeKind::File),
"module" => Ok(NodeKind::Module),
"struct" => Ok(NodeKind::Struct),
"enum" => Ok(NodeKind::Enum),
"trait" => Ok(NodeKind::Trait),
"interface" => Ok(NodeKind::Interface),
"type_alias" => Ok(NodeKind::TypeAlias),
"function" => Ok(NodeKind::Function),
"method" => Ok(NodeKind::Method),
"property" => Ok(NodeKind::Property),
"constant" => Ok(NodeKind::Constant),
"macro" => Ok(NodeKind::Macro),
"annotation" => Ok(NodeKind::Annotation),
"enum_member" | "enum-member" => Ok(NodeKind::EnumMember),
"section" => Ok(NodeKind::Section),
_ => Err(()),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum EdgeKind {
Contains,
Calls,
Implements,
Inherits,
Uses,
Imports,
Annotated,
Throws,
References,
}
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",
EdgeKind::References => "references",
};
f.write_str(s)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum EdgeConfidence {
#[default]
Extracted,
Resolved,
Inferred,
}
impl std::fmt::Display for EdgeConfidence {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
EdgeConfidence::Extracted => "extracted",
EdgeConfidence::Resolved => "resolved",
EdgeConfidence::Inferred => "inferred",
})
}
}
impl EdgeConfidence {
pub fn from_label(s: &str) -> Self {
match s {
"resolved" => EdgeConfidence::Resolved,
"inferred" => EdgeConfidence::Inferred,
_ => EdgeConfidence::Extracted,
}
}
}
#[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"),
}
}
}
impl std::str::FromStr for Visibility {
type Err = ();
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"pub" => Ok(Visibility::Pub),
"pub_crate" => Ok(Visibility::PubCrate),
"private" => Ok(Visibility::Private),
_ => Err(()),
}
}
}
#[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,
}