use crate::graph::node::NodeDescriptor;
use crate::graph::ports::{EdgeContract, MediaCaps};
use crate::graph::spec::{EdgeSpec, NodeId, NodeSpec};
#[derive(Debug, Clone)]
pub struct ResolvedNode {
pub spec: NodeSpec,
pub descriptor: NodeDescriptor,
}
impl ResolvedNode {
pub fn id(&self) -> NodeId {
self.spec.id
}
pub fn type_str(&self) -> &str {
self.spec.type_id.as_str()
}
}
#[derive(Debug, Clone)]
pub struct ResolvedEdge {
pub spec: EdgeSpec,
pub media: MediaCaps, pub contract: Option<EdgeContract>, }
#[derive(Debug, Clone)]
pub struct GraphIr {
pub nodes: Vec<ResolvedNode>,
pub edges: Vec<ResolvedEdge>,
pub topo_order: Vec<NodeId>, }
impl GraphIr {
#[cfg(any(test, feature = "internal-testing"))]
pub fn node_count(&self) -> usize {
self.nodes.len()
}
pub fn edge_count(&self) -> usize {
self.edges.len()
}
pub fn node(&self, id: NodeId) -> Option<&ResolvedNode> {
self.nodes.iter().find(|node| node.spec.id == id)
}
pub fn topo_order(&self) -> &[NodeId] {
&self.topo_order
}
}