mdstream 0.3.0

Streaming-first Markdown middleware for LLM output (committed + pending blocks, render-agnostic).
Documentation
use crate::transform::PendingTransformer;

#[derive(Default)]
pub(crate) struct PendingTransformers {
    chain: Vec<Box<dyn PendingTransformer>>,
}

impl std::fmt::Debug for PendingTransformers {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        f.debug_struct("PendingTransformers")
            .field("len", &self.chain.len())
            .finish()
    }
}

impl PendingTransformers {
    pub(crate) fn push<T>(&mut self, transformer: T)
    where
        T: PendingTransformer + 'static,
    {
        self.chain.push(Box::new(transformer));
    }

    pub(crate) fn as_mut_slice(&mut self) -> &mut [Box<dyn PendingTransformer>] {
        &mut self.chain
    }

    pub(crate) fn reset_all(&mut self) {
        for transformer in &mut self.chain {
            transformer.reset();
        }
    }
}