use serde::{Deserialize, Serialize};
pub(crate) fn default_max_depth() -> u32 {
3
}
pub(crate) fn default_traverse_limit() -> usize {
100
}
pub(crate) fn default_algorithm() -> String {
"bfs".to_string()
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AddEdgeRequest {
pub collection: String,
pub id: u64,
pub source: u64,
pub target: u64,
pub label: String,
#[serde(default)]
pub properties: Option<serde_json::Value>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GetEdgesRequest {
pub collection: String,
pub label: Option<String>,
pub source: Option<u64>,
pub target: Option<u64>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TraverseGraphRequest {
pub collection: String,
pub source: u64,
#[serde(default = "default_max_depth")]
pub max_depth: u32,
pub rel_types: Option<Vec<String>>,
#[serde(default = "default_traverse_limit")]
pub limit: usize,
#[serde(default = "default_algorithm")]
pub algorithm: String,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GetNodeDegreeRequest {
pub collection: String,
pub node_id: u64,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct EdgeOutput {
pub id: u64,
pub source: u64,
pub target: u64,
pub label: String,
pub properties: serde_json::Value,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TraversalOutput {
pub target_id: u64,
pub depth: u32,
pub path: Vec<u64>,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct NodeDegreeOutput {
pub node_id: u64,
pub in_degree: usize,
pub out_degree: usize,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TraverseGraphParallelRequest {
pub collection: String,
pub sources: Vec<u64>,
#[serde(default = "default_max_depth")]
pub max_depth: u32,
#[serde(default = "default_traverse_limit")]
pub limit: usize,
pub rel_types: Option<Vec<String>>,
}