//! 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<()>;
}