use petgraph::stable_graph::StableDiGraph;
use std::path::PathBuf;
pub type LineageGraph = StableDiGraph<NodeData, EdgeData>;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum NodeType {
Model,
Source,
Seed,
Snapshot,
Test,
Exposure,
Phantom,
}
impl NodeType {
pub fn prefix(&self) -> &'static str {
match self {
NodeType::Model => "",
NodeType::Source => "src:",
NodeType::Seed => "seed:",
NodeType::Snapshot => "snap:",
NodeType::Test => "test:",
NodeType::Exposure => "exp:",
NodeType::Phantom => "?:",
}
}
pub fn label(&self) -> &'static str {
match self {
NodeType::Model => "model",
NodeType::Source => "source",
NodeType::Seed => "seed",
NodeType::Snapshot => "snapshot",
NodeType::Test => "test",
NodeType::Exposure => "exposure",
NodeType::Phantom => "phantom",
}
}
}
#[derive(Debug, Clone)]
pub struct NodeData {
pub unique_id: String,
pub label: String,
pub node_type: NodeType,
pub file_path: Option<PathBuf>,
pub description: Option<String>,
}
impl NodeData {
pub fn display_name(&self) -> String {
let prefix = self.node_type.prefix();
if prefix.is_empty() {
self.label.clone()
} else {
format!("{}{}", prefix, self.label)
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[allow(dead_code)]
pub enum EdgeType {
Ref,
Source,
Test,
Exposure,
}
#[derive(Debug, Clone)]
pub struct EdgeData {
pub edge_type: EdgeType,
}