//! Parallel execution action use futures::stream::{self, StreamExt}; use serde_json::Value; use super::ActionError; /// Execute steps in parallel pub async fn execute_parallel( items: &[Value], max_workers: usize, executor: F, ) -> Result, ActionError> where F: Fn(Value, usize) -> Fut, Fut: std::future::Future>, { let results: Vec> = stream::iter(items.iter().enumerate()) .map(|(index, item)| { let item = item.clone(); executor(item, index) }) .buffer_unordered(max_workers) .collect() .await; let mut outputs = Vec::new(); for result in results { outputs.push(result?); } Ok(outputs) }