pipeflow 0.0.4

A lightweight, configuration-driven data pipeline framework
Documentation
//! Sink trait and implementations

use async_trait::async_trait;

use crate::common::message::SharedMessage;
use crate::error::Result;

pub mod blackhole;
pub mod console;
#[cfg(feature = "file")]
pub mod file;
#[cfg(feature = "http-client")]
pub mod http_client;
#[cfg(feature = "notify")]
pub mod notify;
#[cfg(feature = "redis")]
pub mod redis;
#[cfg(feature = "database")]
pub mod sql;
pub mod system;

/// Sink consumes messages from the pipeline
#[async_trait]
pub trait Sink: Send + Sync {
    /// Unique node identifier
    fn id(&self) -> &str;

    /// Process a single message
    ///
    /// The message is wrapped in Arc for efficient sharing across multiple sinks.
    /// If mutation is needed, use `Arc::make_mut` or clone the inner Message.
    async fn process(&self, msg: SharedMessage) -> Result<()>;
}