pub struct MessageStorage { /* private fields */ }
Expand description
Storage for all message types.
This struct maintains a registry mapping each message type to its corresponding Messages<M>
container.
Implementations§
Source§impl MessageStorage
impl MessageStorage
Sourcepub fn new() -> MessageStorage
pub fn new() -> MessageStorage
Creates a new, empty MessageStorage
.
Sourcepub fn register_message_type<M>(&mut self)where
M: Message,
pub fn register_message_type<M>(&mut self)where
M: Message,
Sourcepub fn get_mut<M>(&mut self) -> Option<&mut Messages<M>>where
M: Message,
pub fn get_mut<M>(&mut self) -> Option<&mut Messages<M>>where
M: Message,
Retrieves a mutable reference to the Messages<M>
container for the specified message type.
Returns None
if the message type has not been registered.
§Type Parameters
M
- The message type to retrieve.
§Example
use swamp_message::prelude::*;
#[derive(Message, Debug, Copy, Clone)]
struct MyMessage;
let mut storage = MessageStorage::new();
if let Some(messages) = storage.get_mut::<MyMessage>() {
// Use `messages` here
}
Sourcepub fn get<M>(&self) -> Option<&Messages<M>>where
M: Message,
pub fn get<M>(&self) -> Option<&Messages<M>>where
M: Message,
Retrieves an immutable reference to the Messages<M>
container for the specified message type.
Returns None
if the message type has not been registered.
§Type Parameters
M
- The message type to retrieve.
§Example
use swamp_message::prelude::*;
#[derive(Message, Debug, Copy, Clone)]
struct MyMessage;
let mut storage = MessageStorage::new();
if let Some(messages) = storage.get::<MyMessage>() {
// Use `messages` here
}
Sourcepub fn swap_all(&mut self)
pub fn swap_all(&mut self)
Swaps the current and previous frame message lists for all registered message types.
This should be called at the start of each new frame to transition messages appropriately.
Note: The order in which message queues are swapped is not deterministic due to the nature of HashMap
.
This is generally acceptable but should be considered if order matters.
Sourcepub fn send<M>(&mut self, message: M) -> MessageId<M>where
M: Message,
pub fn send<M>(&mut self, message: M) -> MessageId<M>where
M: Message,
Sends a message of a specific type.
This method abstracts over the message type, automatically handling registration if necessary.
§Type Parameters
M
- The message type to send.
§Arguments
message
- The message to be sent.
§Returns
A MessageId
uniquely identifying the sent message.
§Example
use swamp_message::prelude::*;
#[derive(Message, Debug, Copy, Clone)]
struct MyMessage;
let mut storage = MessageStorage::new();
let msg_id = storage.send(MyMessage { /* fields */ });
Sourcepub fn iter_current<M>(&self) -> Option<MessagesIterator<'_, M>>where
M: Message,
pub fn iter_current<M>(&self) -> Option<MessagesIterator<'_, M>>where
M: Message,
Iterates over all messages of a specific type in the current frame.
§Type Parameters
M
- The message type to iterate over.
§Returns
An iterator over references to messages of type M
in the current frame.
§Example
use swamp_message::prelude::*;
#[derive(Message, Debug, Copy, Clone)]
struct MyMessage;
let mut storage = MessageStorage::new();
for message in storage.iter_current::<MyMessage>() {
// Process `message`
}
Sourcepub fn iter_previous<M>(&self) -> Option<MessagesIterator<'_, M>>where
M: Message,
pub fn iter_previous<M>(&self) -> Option<MessagesIterator<'_, M>>where
M: Message,
Iterates over all messages of a specific type in the previous frame.
§Type Parameters
M
- The message type to iterate over.
§Returns
An iterator over references to messages of type M
in the previous frame.
§Example
use swamp_message::prelude::*;
#[derive(Message, Debug, Copy, Clone)]
struct MyMessage;
let mut storage = MessageStorage::new();
for message in storage.iter_previous::<MyMessage>() {
// Process `message`
}