synaptic_runnables/
each.rs1use async_trait::async_trait;
2use synaptic_core::{RunnableConfig, SynapseError};
3
4use crate::runnable::{BoxRunnable, Runnable};
5
6pub struct RunnableEach<I: Send + 'static, O: Send + 'static> {
20 inner: BoxRunnable<I, O>,
21}
22
23impl<I: Send + 'static, O: Send + 'static> RunnableEach<I, O> {
24 pub fn new(inner: BoxRunnable<I, O>) -> Self {
25 Self { inner }
26 }
27}
28
29#[async_trait]
30impl<I: Send + 'static, O: Send + 'static> Runnable<Vec<I>, Vec<O>> for RunnableEach<I, O> {
31 async fn invoke(&self, input: Vec<I>, config: &RunnableConfig) -> Result<Vec<O>, SynapseError> {
32 let mut results = Vec::with_capacity(input.len());
33 for item in input {
34 results.push(self.inner.invoke(item, config).await?);
35 }
36 Ok(results)
37 }
38}