use petgraph::stable_graph::NodeIndex;
use serde::{Deserialize, Serialize};
pub type NodeId = NodeIndex<u32>;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CodeNode {
pub id: NodeId,
pub kind: NodeKind,
pub name: String,
pub file_path: Option<String>,
pub line_range: Option<(usize, usize)>,
pub doc_comment: Option<String>,
pub signature: Option<String>,
#[serde(default)]
pub visibility: Option<String>,
pub module_path: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum NodeKind {
Project,
Module,
File,
Struct,
Enum,
Function,
Trait,
Impl,
Type,
Constant,
Variable,
Interface,
Class,
Macro,
}
impl NodeKind {
pub fn as_str(&self) -> &'static str {
match self {
NodeKind::Project => "project",
NodeKind::Module => "module",
NodeKind::File => "file",
NodeKind::Struct => "struct",
NodeKind::Enum => "enum",
NodeKind::Function => "function",
NodeKind::Trait => "trait",
NodeKind::Impl => "impl",
NodeKind::Type => "type",
NodeKind::Constant => "constant",
NodeKind::Variable => "variable",
NodeKind::Interface => "interface",
NodeKind::Class => "class",
NodeKind::Macro => "macro",
}
}
}