pub mod builder;
pub mod cache;
pub mod query;
pub use builder::build_from_analysis;
pub use query::blast_radius;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum Node {
File {
name: String,
path: String,
},
Module {
name: String,
path: String,
},
Function {
name: String,
path: String,
visibility: String,
},
Struct {
name: String,
path: String,
visibility: String,
},
Enum {
name: String,
path: String,
visibility: String,
},
Trait {
name: String,
path: String,
visibility: String,
},
Impl {
name: String,
path: String,
},
}
impl Node {
#[must_use]
pub fn name(&self) -> &str {
match self {
Node::File { name, .. }
| Node::Module { name, .. }
| Node::Function { name, .. }
| Node::Struct { name, .. }
| Node::Enum { name, .. }
| Node::Trait { name, .. }
| Node::Impl { name, .. } => name,
}
}
#[must_use]
pub fn path(&self) -> &str {
match self {
Node::File { path, .. }
| Node::Module { path, .. }
| Node::Function { path, .. }
| Node::Struct { path, .. }
| Node::Enum { path, .. }
| Node::Trait { path, .. }
| Node::Impl { path, .. } => path,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum Edge {
Contains,
Calls,
Imports,
Implements,
HasMethod,
Modifies,
Tests,
}
pub type GraphDb = petgraph::graph::DiGraph<Node, Edge>;