#![cfg_attr(coverage_nightly, coverage(off))]
use super::*;
use crate::agents::registry::AgentRegistry;
use futures::future::join_all;
use parking_lot::RwLock;
use std::collections::HashMap;
use std::sync::Arc;
use tokio::time::{sleep, timeout};
pub struct DefaultWorkflowExecutor {
agent_registry: Arc<AgentRegistry>,
monitor: Option<Arc<dyn WorkflowMonitor>>,
execution_states: Arc<RwLock<HashMap<Uuid, ExecutionState>>>,
}
#[derive(Debug, Clone, PartialEq)]
enum ExecutionControl {
Running,
Paused,
Cancelled,
}
#[derive(Debug, Clone)]
struct ExecutionState {
control: ExecutionControl,
checkpoint: Option<CheckpointData>,
}
#[derive(Debug, Clone)]
struct CheckpointData {
_completed_steps: Vec<String>,
_current_level: usize,
}
impl Default for ExecutionState {
fn default() -> Self {
Self {
control: ExecutionControl::Running,
checkpoint: None,
}
}
}
include!("executor_core.rs");
include!("executor_helpers.rs");
include!("executor_trait_impl.rs");
#[cfg(test)]
#[path = "executor_tests.rs"]
mod tests;