rlink 0.6.16

High performance Stream Processing Framework
Documentation
use crate::channel::receiver::ChannelReceiver;
use crate::channel::sender::ChannelSender;
use crate::channel::{named_channel, RecvError, SendError, TryRecvError, TrySendError};
use crate::core::element::Record;
use crate::metrics::Tag;

#[derive(Clone)]
pub struct Handover<T = Record>
where
    T: Send + Sync,
{
    sender: ChannelSender<T>,
    receiver: ChannelReceiver<T>,
}

impl<T> Handover<T>
where
    T: Send + Sync,
{
    pub fn new(name: &str, tags: Vec<Tag>, buffer_size: usize) -> Self {
        let (sender, receiver) = named_channel(name, tags, buffer_size);
        Handover { sender, receiver }
    }

    #[inline]
    pub fn try_poll_next(&self) -> Result<T, TryRecvError> {
        self.receiver.try_recv()
    }

    #[inline]
    pub fn poll_next(&self) -> Result<T, RecvError> {
        self.receiver.recv()
    }

    #[inline]
    pub fn produce(&self, record: T) -> Result<(), SendError<T>> {
        self.sender.send(record)
    }

    #[inline]
    pub fn try_produce(&self, record: T) -> Result<(), TrySendError<T>> {
        self.sender.try_send(record)
    }
}