#[cfg(feature = "multi_threaded")]
use crate::message::MessageParIter;
use crate::{
message::{Message, MessageCursor, MessageIterator, MessageIteratorWithId, Messages},
system::{Local, Res, SystemParam},
};
#[derive(SystemParam, Debug)]
pub struct MessageReader<'w, 's, E: Message> {
pub(super) reader: Local<'s, MessageCursor<E>>,
#[system_param(validation_message = "Message not initialized")]
messages: Res<'w, Messages<E>>,
}
impl<'w, 's, E: Message> MessageReader<'w, 's, E> {
pub fn read(&mut self) -> MessageIterator<'_, E> {
self.reader.read(&self.messages)
}
pub fn read_with_id(&mut self) -> MessageIteratorWithId<'_, E> {
self.reader.read_with_id(&self.messages)
}
#[cfg(feature = "multi_threaded")]
pub fn par_read(&mut self) -> MessageParIter<'_, E> {
self.reader.par_read(&self.messages)
}
pub fn len(&self) -> usize {
self.reader.len(&self.messages)
}
pub fn is_empty(&self) -> bool {
self.reader.is_empty(&self.messages)
}
pub fn clear(&mut self) {
self.reader.clear(&self.messages);
}
}