pixelflow-filters 0.1.0

Official in-repository filters for PixelFlow.
//! FFMS2-backed source plugin boundary for PixelFlow.

mod backend;
mod cache;
mod executor;
mod indexer;
mod options;

use pixelflow_core::Result;

pub use indexer::{
    IndexProgressSink, IndexedSources, NoopIndexProgressSink, SourceIndexContext,
    index_reachable_sources,
};

/// Public script-facing source filter name.
pub const SOURCE_FILTER_NAME: &str = "source";

/// Placeholder registry for source filters.
#[derive(Debug, Default)]
pub struct SourceRegistry {
    names: Vec<&'static str>,
}

impl SourceRegistry {
    /// Creates an empty source registry.
    #[must_use]
    pub fn new() -> Self {
        Self::default()
    }

    /// Records one source filter name.
    pub fn register(&mut self, name: &'static str) {
        self.names.push(name);
    }

    /// Returns registered source filter names in registration order.
    #[must_use]
    pub fn names(&self) -> &[&'static str] {
        &self.names
    }
}

/// Registers the initial FFMS2 source filter name.
pub fn register_ffms2_source(registry: &mut SourceRegistry) -> Result<()> {
    registry.register(SOURCE_FILTER_NAME);
    Ok(())
}

#[cfg(test)]
mod tests {
    use super::{SOURCE_FILTER_NAME, SourceRegistry, register_ffms2_source};

    #[test]
    fn register_ffms2_source_records_source_name() {
        let mut registry = SourceRegistry::new();

        register_ffms2_source(&mut registry).expect("source registration should succeed");

        assert_eq!(registry.names(), &[SOURCE_FILTER_NAME]);
    }
}