use serde::{Deserialize, Serialize};
use crate::error::Result;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct WorkflowNode {
pub id: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct WorkflowEdge {
pub from: String,
pub to: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Workflow {
pub nodes: Vec<WorkflowNode>,
pub edges: Vec<WorkflowEdge>,
}
pub trait WorkflowPort: Send + Sync {
fn validate_acyclic(&self, workflow: &Workflow) -> Result<()>;
fn topological_order(&self, workflow: &Workflow) -> Result<Vec<String>>;
fn ready_set(&self, workflow: &Workflow, completed: &[String]) -> Result<Vec<String>>;
}