use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum SubgraphDirection {
Outgoing,
Incoming,
#[default]
Both,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubgraphNode {
pub uuid: String,
pub name: String,
pub kind: Option<String>,
pub fqn: Option<String>,
pub signature: Option<String>,
pub docstring: Option<String>,
pub file_path: Option<String>,
pub start_line: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubgraphEdge {
pub source_uuid: String,
pub target_uuid: String,
pub relationship: String,
}
#[derive(Debug, Clone)]
pub struct SubgraphQueryOptions<'a> {
pub entity_name: &'a str,
pub repo_name: &'a str,
pub depth: u32,
pub relationships: &'a [&'a str],
pub direction: SubgraphDirection,
pub max_nodes: usize,
pub entity_uuid: Option<&'a str>,
pub visible_kinds: Option<&'a [&'a str]>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubgraphResult {
pub root_id: Option<String>,
pub nodes: Vec<SubgraphNode>,
pub edges: Vec<SubgraphEdge>,
pub truncated: bool,
pub total_nodes_found: usize,
}