use serde::{Deserialize, Serialize};
use super::{
address::RevisionId,
hyperedge::{EndpointRef, Hyperedge, HyperedgeKind},
};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TraversalSpec {
pub start: EndpointRef,
pub max_depth: usize,
pub follow_kinds: Option<Vec<HyperedgeKind>>,
pub as_of: Option<RevisionId>,
}
#[derive(Debug, Clone, Default)]
pub struct Subgraph {
pub nodes: Vec<EndpointRef>,
pub edges: Vec<Hyperedge>,
}
impl Subgraph {
pub fn add_node(&mut self, ep: EndpointRef) {
if !self.nodes.iter().any(|n| n.space == ep.space && n.node.coords == ep.node.coords) {
self.nodes.push(ep);
}
}
pub fn add_edge(&mut self, edge: Hyperedge) {
if !self.edges.iter().any(|e| e.id == edge.id) {
self.edges.push(edge);
}
}
}