pub struct Subscriber<T: Hash + Eq, M> { /* private fields */ }Expand description
Subscriber to the tagged queue created by subscribe() function.
Implementations§
Source§impl<T, M> Subscriber<T, M>
impl<T, M> Subscriber<T, M>
Sourcepub fn subs_count(&self) -> usize
pub fn subs_count(&self) -> usize
Returns the number of subscribers of the same tag.
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns length of tagged queue.
§Example
use mqb::MessageQueueBroker;
let mqb = MessageQueueBroker::unbounded();
let sub1 = mqb.subscribe(1);
let sub2 = mqb.subscribe(2);
mqb.send(&2, 1).await.unwrap();
assert_eq!(sub1.len(), 0);
assert_eq!(sub2.len(), mqb.len());Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Checks if the tagged queue is empty.
§Example
use mqb::MessageQueueBroker;
let mqb = MessageQueueBroker::unbounded();
let sub1 = mqb.subscribe(1);
let sub2 = mqb.subscribe(2);
mqb.send(&2, 1).await.unwrap();
assert!(sub1.is_empty());
assert_eq!(sub2.len(), mqb.len());Sourcepub fn try_recv(&self) -> Result<M, TryRecvError>
pub fn try_recv(&self) -> Result<M, TryRecvError>
Trying to receive a message from the tagged queue.
If broker is closed then returns TryRecvError::Closed.
If the tagged queue is empty returns TryRecvError::Empty.
§Ok
use mqb::MessageQueueBroker;
let mqb = MessageQueueBroker::unbounded();
let sub = mqb.subscribe(1);
assert!(mqb.try_send(&1, 1).is_ok());
assert_eq!(sub.try_recv().unwrap(), 1);§Broker closed
use mqb::{MessageQueueBroker, TryRecvError};
let mqb = MessageQueueBroker::<i32, i32>::unbounded();
let sub = mqb.subscribe(1);
mqb.close();
assert_eq!(sub.try_recv().unwrap_err(), TryRecvError::Closed);§Queue is empty
use mqb::{MessageQueueBroker, TryRecvError};
let mqb = MessageQueueBroker::<i32, i32>::unbounded();
let sub = mqb.subscribe(1);
assert_eq!(sub.try_recv().unwrap_err(), TryRecvError::Empty);Sourcepub async fn recv(&self) -> Result<M, RecvError>
pub async fn recv(&self) -> Result<M, RecvError>
Receives a message from the tagged queue.
If broker is closed then returns RecvError.
§Ok
use mqb::MessageQueueBroker;
let mqb = MessageQueueBroker::unbounded();
let sub = mqb.subscribe(1);
assert!(mqb.send(&1, 1).await.is_ok());
assert_eq!(sub.recv().await.unwrap(), 1);§Broker closed
use mqb::{MessageQueueBroker, RecvError};
let mqb = MessageQueueBroker::<i32, i32>::unbounded();
let sub = mqb.subscribe(1);
mqb.close();
assert_eq!(sub.recv().await.unwrap_err(), RecvError);§Queue is empty
use mqb::MessageQueueBroker;
let mqb = MessageQueueBroker::<i32, i32>::bounded(1);
let sub = mqb.subscribe(1);
// Wait endlessly...
sub.recv().await;Trait Implementations§
Source§impl<T, M> Clone for Subscriber<T, M>
impl<T, M> Clone for Subscriber<T, M>
Auto Trait Implementations§
impl<T, M> Freeze for Subscriber<T, M>where
T: Freeze,
impl<T, M> RefUnwindSafe for Subscriber<T, M>where
T: RefUnwindSafe,
impl<T, M> Send for Subscriber<T, M>
impl<T, M> Sync for Subscriber<T, M>
impl<T, M> Unpin for Subscriber<T, M>where
T: Unpin,
impl<T, M> UnwindSafe for Subscriber<T, M>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more