1use arbor_core::CodeNode;
7use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Serialize, Deserialize)]
11pub struct ImpactResult {
12 pub target: NodeInfo,
14
15 pub dependents: Vec<DependentInfo>,
17
18 pub total_affected: usize,
20
21 pub query_time_ms: u64,
23}
24
25#[derive(Debug, Serialize, Deserialize)]
27pub struct QueryResult {
28 pub nodes: Vec<NodeInfo>,
30
31 pub total_tokens: usize,
33
34 pub query_time_ms: u64,
36}
37
38#[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, }
65 }
66}
67
68#[derive(Debug, Serialize, Deserialize)]
70pub struct DependentInfo {
71 pub node: NodeInfo,
72 pub relationship: String,
73 pub depth: usize,
74}