cometd_client/types/channel/
receiver.rs

1use crate::types::CometdClientEvent;
2use async_broadcast::{Receiver, RecvError};
3
4/// Event channel receiver.
5#[derive(Debug)]
6pub struct CometdEventReceiver<Msg>(pub(crate) Receiver<CometdClientEvent<Msg>>);
7
8impl<Msg> CometdEventReceiver<Msg> {
9    /// Receive event from event channel.
10    /// Return `None` if channel was closed.
11    #[inline(always)]
12    pub async fn recv(&mut self) -> Option<CometdClientEvent<Msg>> {
13        match self.0.recv().await {
14            Ok(data) => Some(data),
15            Err(RecvError::Closed) => None,
16            Err(RecvError::Overflowed(_)) => unreachable!(),
17        }
18    }
19}