velesdb_server/handlers/graph/
types.rs1use serde::{Deserialize, Serialize};
6use utoipa::{IntoParams, ToSchema};
7
8#[derive(Debug, Clone, Serialize, ToSchema)]
10pub struct TraversalResultItem {
11 pub target_id: u64,
13 pub depth: u32,
15 pub path: Vec<u64>,
17}
18
19#[derive(Debug, Deserialize, IntoParams)]
21pub struct EdgeQueryParams {
22 #[param(example = "KNOWS")]
24 pub label: Option<String>,
25}
26
27#[derive(Debug, Deserialize, ToSchema)]
29pub struct TraverseRequest {
30 pub source: u64,
32 #[serde(default = "default_strategy")]
34 pub strategy: String,
35 #[serde(default = "default_max_depth")]
37 pub max_depth: u32,
38 #[serde(default = "default_limit")]
40 pub limit: usize,
41 pub cursor: Option<String>,
43 #[serde(default)]
45 pub rel_types: Vec<String>,
46}
47
48fn default_strategy() -> String {
49 "bfs".to_string()
50}
51
52fn default_max_depth() -> u32 {
53 3
54}
55
56fn default_limit() -> usize {
57 100
58}
59
60#[derive(Debug, Serialize, ToSchema)]
62pub struct TraverseResponse {
63 pub results: Vec<TraversalResultItem>,
65 pub next_cursor: Option<String>,
67 pub has_more: bool,
69 pub stats: TraversalStats,
71}
72
73#[derive(Debug, Serialize, ToSchema)]
75pub struct TraversalStats {
76 pub visited: usize,
78 pub depth_reached: u32,
80}
81
82#[derive(Debug, Serialize, ToSchema)]
84pub struct DegreeResponse {
85 pub in_degree: usize,
87 pub out_degree: usize,
89}
90
91#[derive(Debug, Serialize, ToSchema)]
93pub struct EdgesResponse {
94 pub edges: Vec<EdgeResponse>,
96 pub count: usize,
98}
99
100#[derive(Debug, Serialize, ToSchema)]
102pub struct EdgeResponse {
103 pub id: u64,
105 pub source: u64,
107 pub target: u64,
109 pub label: String,
111 pub properties: serde_json::Value,
113}
114
115#[derive(Debug, Deserialize, ToSchema)]
117pub struct AddEdgeRequest {
118 pub id: u64,
120 pub source: u64,
122 pub target: u64,
124 pub label: String,
126 #[serde(default)]
128 pub properties: serde_json::Value,
129}
130
131#[derive(Debug, Deserialize, IntoParams)]
137pub struct StreamTraverseParams {
138 #[param(example = 123)]
140 pub start_node: u64,
141 #[serde(default = "default_algorithm")]
143 #[param(example = "bfs")]
144 pub algorithm: String,
145 #[serde(default = "default_stream_max_depth")]
147 #[param(example = 5)]
148 pub max_depth: u32,
149 #[serde(default = "default_stream_limit")]
151 #[param(example = 1000)]
152 pub limit: usize,
153 #[serde(default)]
155 #[param(example = "KNOWS,FOLLOWS")]
156 pub relationship_types: Option<String>,
157}
158
159fn default_algorithm() -> String {
160 "bfs".to_string()
161}
162
163fn default_stream_max_depth() -> u32 {
164 5
165}
166
167fn default_stream_limit() -> usize {
168 1000
169}
170
171#[derive(Debug, Serialize, ToSchema)]
173pub struct StreamNodeEvent {
174 pub id: u64,
176 pub depth: u32,
178 pub path: Vec<u64>,
180}
181
182#[derive(Debug, Serialize, ToSchema)]
184pub struct StreamStatsEvent {
185 pub nodes_visited: usize,
187 pub elapsed_ms: u64,
189}
190
191#[derive(Debug, Serialize, ToSchema)]
193pub struct StreamDoneEvent {
194 pub total_nodes: usize,
196 pub max_depth_reached: u32,
198 pub elapsed_ms: u64,
200}
201
202#[derive(Debug, Serialize, ToSchema)]
204pub struct StreamErrorEvent {
205 pub error: String,
207}