arbor_graph/
query.rs

1//! Query result types.
2//!
3//! These structs represent the results of various graph queries.
4//! They're designed to be easily serializable for the protocol.
5
6use arbor_core::CodeNode;
7use serde::{Deserialize, Serialize};
8
9/// Result of an impact analysis query.
10#[derive(Debug, Serialize, Deserialize)]
11pub struct ImpactResult {
12    /// The target node being analyzed.
13    pub target: NodeInfo,
14
15    /// Nodes that depend on the target.
16    pub dependents: Vec<DependentInfo>,
17
18    /// Total count of affected nodes.
19    pub total_affected: usize,
20
21    /// Time taken to compute (milliseconds).
22    pub query_time_ms: u64,
23}
24
25/// Result of a context query.
26#[derive(Debug, Serialize, Deserialize)]
27pub struct QueryResult {
28    /// Matched nodes, ranked by relevance.
29    pub nodes: Vec<NodeInfo>,
30
31    /// Total token count of included source.
32    pub total_tokens: usize,
33
34    /// Time taken (milliseconds).
35    pub query_time_ms: u64,
36}
37
38/// Basic information about a node.
39#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct NodeInfo {
41    pub id: String,
42    pub name: String,
43    pub qualified_name: String,
44    pub kind: String,
45    pub file: String,
46    pub line_start: u32,
47    pub line_end: u32,
48    pub signature: Option<String>,
49    pub centrality: f64,
50}
51
52impl From<&CodeNode> for NodeInfo {
53    fn from(node: &CodeNode) -> Self {
54        Self {
55            id: node.id.clone(),
56            name: node.name.clone(),
57            qualified_name: node.qualified_name.clone(),
58            kind: node.kind.to_string(),
59            file: node.file.clone(),
60            line_start: node.line_start,
61            line_end: node.line_end,
62            signature: node.signature.clone(),
63            centrality: 0.0, // Will be filled in by the graph
64        }
65    }
66}
67
68/// Information about a dependent node.
69#[derive(Debug, Serialize, Deserialize)]
70pub struct DependentInfo {
71    pub node: NodeInfo,
72    pub relationship: String,
73    pub depth: usize,
74}