Skip to main content

synaptic_condenser/
pipeline.rs

1use std::sync::Arc;
2
3use crate::Condenser;
4use async_trait::async_trait;
5use synaptic_core::{Message, SynapticError};
6
7/// Chains multiple condensers in sequence.
8pub struct PipelineCondenser(pub Vec<Arc<dyn Condenser>>);
9
10impl PipelineCondenser {
11    pub fn new(condensers: Vec<Arc<dyn Condenser>>) -> Self {
12        Self(condensers)
13    }
14}
15
16#[async_trait]
17impl Condenser for PipelineCondenser {
18    async fn condense(&self, mut messages: Vec<Message>) -> Result<Vec<Message>, SynapticError> {
19        for c in &self.0 {
20            messages = c.condense(messages).await?;
21        }
22        Ok(messages)
23    }
24}