use std::time::Duration;
use super::InternalEnvelope;
#[derive(Clone)]
pub(super) struct Incoming {
rx: crossbeam_channel::Receiver<InternalEnvelope>,
}
impl Incoming {
pub(super) fn new(rx: crossbeam_channel::Receiver<InternalEnvelope>) -> Self {
Incoming { rx }
}
pub fn recv(&self) -> Result<InternalEnvelope, RecvError> {
self.rx.recv().map_err(|_| RecvError {})
}
pub fn recv_timeout(&self, timeout: Duration) -> Result<InternalEnvelope, RecvTimeoutError> {
Ok(self.rx.recv_timeout(timeout)?)
}
}
#[derive(Debug)]
pub struct RecvError;
#[derive(Debug)]
pub enum RecvTimeoutError {
Disconnected,
Timeout,
}
impl From<crossbeam_channel::RecvTimeoutError> for RecvTimeoutError {
fn from(err: crossbeam_channel::RecvTimeoutError) -> Self {
match err {
crossbeam_channel::RecvTimeoutError::Disconnected => RecvTimeoutError::Disconnected,
crossbeam_channel::RecvTimeoutError::Timeout => RecvTimeoutError::Timeout,
}
}
}