use std::collections::HashMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GraphNode {
pub id: String,
pub node_type: String,
pub metadata: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GraphEdge {
pub id: String,
pub source: String,
pub target: String,
pub relationship_type: String,
pub weight: f32,
pub metadata: HashMap<String, serde_json::Value>,
pub created_at: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum RelationshipType {
SimilarTo,
References,
Contains,
DerivedFrom,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NeighborInfo {
pub node: GraphNode,
pub edge: GraphEdge,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RelatedNodeInfo {
pub node: GraphNode,
pub distance: usize,
pub weight: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FindRelatedRequest {
pub max_hops: Option<usize>,
pub relationship_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FindRelatedResponse {
pub related: Vec<RelatedNodeInfo>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FindPathRequest {
pub collection: String,
pub source: String,
pub target: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FindPathResponse {
pub path: Vec<GraphNode>,
pub found: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateEdgeRequest {
pub collection: String,
pub source: String,
pub target: String,
pub relationship_type: String,
pub weight: Option<f32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateEdgeResponse {
pub edge_id: String,
pub success: bool,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListNodesResponse {
pub nodes: Vec<GraphNode>,
pub count: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GetNeighborsResponse {
pub neighbors: Vec<NeighborInfo>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListEdgesResponse {
pub edges: Vec<GraphEdge>,
pub count: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiscoverEdgesRequest {
pub similarity_threshold: Option<f32>,
pub max_per_node: Option<usize>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiscoverEdgesResponse {
pub success: bool,
pub edges_created: usize,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiscoveryStatusResponse {
pub total_nodes: usize,
pub nodes_with_edges: usize,
pub total_edges: usize,
pub progress_percentage: f64,
}