use crate::error::SinkError;
use crate::event::CaptureEvent;
use crate::sink::Sink;
use crossbeam_channel::Sender;
pub struct ChannelSink {
tx: Sender<CaptureEvent>,
}
impl ChannelSink {
pub fn new(tx: Sender<CaptureEvent>) -> Self {
Self { tx }
}
pub fn bounded(cap: usize) -> (Self, crossbeam_channel::Receiver<CaptureEvent>) {
let (tx, rx) = crossbeam_channel::bounded(cap);
(Self { tx }, rx)
}
pub fn unbounded() -> (Self, crossbeam_channel::Receiver<CaptureEvent>) {
let (tx, rx) = crossbeam_channel::unbounded();
(Self { tx }, rx)
}
}
impl Sink for ChannelSink {
fn on_event(&mut self, event: &CaptureEvent) -> Result<(), SinkError> {
self.tx
.send(event.clone())
.map_err(|_| SinkError::Disconnected)
}
}