1use std::collections::HashMap;
4
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct GraphNode {
10 pub id: String,
12 pub node_type: String,
14 pub metadata: HashMap<String, serde_json::Value>,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
20pub struct GraphEdge {
21 pub id: String,
23 pub source: String,
25 pub target: String,
27 pub relationship_type: String,
29 pub weight: f32,
31 pub metadata: HashMap<String, serde_json::Value>,
33 pub created_at: String,
35}
36
37#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
39#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
40pub enum RelationshipType {
41 SimilarTo,
43 References,
45 Contains,
47 DerivedFrom,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
53pub struct NeighborInfo {
54 pub node: GraphNode,
56 pub edge: GraphEdge,
58}
59
60#[derive(Debug, Clone, Serialize, Deserialize)]
62pub struct RelatedNodeInfo {
63 pub node: GraphNode,
65 pub distance: usize,
67 pub weight: f32,
69}
70
71#[derive(Debug, Clone, Serialize, Deserialize)]
73pub struct FindRelatedRequest {
74 pub max_hops: Option<usize>,
76 pub relationship_type: Option<String>,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
82pub struct FindRelatedResponse {
83 pub related: Vec<RelatedNodeInfo>,
85}
86
87#[derive(Debug, Clone, Serialize, Deserialize)]
89pub struct FindPathRequest {
90 pub collection: String,
92 pub source: String,
94 pub target: String,
96}
97
98#[derive(Debug, Clone, Serialize, Deserialize)]
100pub struct FindPathResponse {
101 pub path: Vec<GraphNode>,
103 pub found: bool,
105}
106
107#[derive(Debug, Clone, Serialize, Deserialize)]
109pub struct CreateEdgeRequest {
110 pub collection: String,
112 pub source: String,
114 pub target: String,
116 pub relationship_type: String,
118 pub weight: Option<f32>,
120}
121
122#[derive(Debug, Clone, Serialize, Deserialize)]
124pub struct CreateEdgeResponse {
125 pub edge_id: String,
127 pub success: bool,
129 pub message: String,
131}
132
133#[derive(Debug, Clone, Serialize, Deserialize)]
135pub struct ListNodesResponse {
136 pub nodes: Vec<GraphNode>,
138 pub count: usize,
140}
141
142#[derive(Debug, Clone, Serialize, Deserialize)]
144pub struct GetNeighborsResponse {
145 pub neighbors: Vec<NeighborInfo>,
147}
148
149#[derive(Debug, Clone, Serialize, Deserialize)]
151pub struct ListEdgesResponse {
152 pub edges: Vec<GraphEdge>,
154 pub count: usize,
156}
157
158#[derive(Debug, Clone, Serialize, Deserialize)]
160pub struct DiscoverEdgesRequest {
161 pub similarity_threshold: Option<f32>,
163 pub max_per_node: Option<usize>,
165}
166
167#[derive(Debug, Clone, Serialize, Deserialize)]
169pub struct DiscoverEdgesResponse {
170 pub success: bool,
172 pub edges_created: usize,
174 pub message: String,
176}
177
178#[derive(Debug, Clone, Serialize, Deserialize)]
180pub struct DiscoveryStatusResponse {
181 pub total_nodes: usize,
183 pub nodes_with_edges: usize,
185 pub total_edges: usize,
187 pub progress_percentage: f64,
189}