swamp_system_state/
lib.rs

1/*
2 * Copyright (c) Peter Bjorklund. All rights reserved. https://github.com/swamp/swamp
3 * Licensed under the MIT License. See LICENSE in the project root for license information.
4 */
5use swamp_message::{Message, MessageStorage, Messages};
6use swamp_resource::{Resource, ResourceStorage};
7
8#[derive(Debug, Default)]
9pub struct State {
10    resources: ResourceStorage,
11    messages: MessageStorage,
12}
13
14impl State {
15    #[must_use]
16    pub fn new() -> Self {
17        Self {
18            resources: ResourceStorage::new(),
19            messages: MessageStorage::new(),
20        }
21    }
22
23    #[must_use]
24    pub const fn messages(&self) -> &MessageStorage {
25        &self.messages
26    }
27
28    pub fn messages_mut(&mut self) -> &mut MessageStorage {
29        &mut self.messages
30    }
31
32    #[must_use]
33    pub const fn resources(&self) -> &ResourceStorage {
34        &self.resources
35    }
36
37    pub fn resources_mut(&mut self) -> &mut ResourceStorage {
38        &mut self.resources
39    }
40
41    #[inline]
42    #[must_use]
43    pub fn resource<R: Resource>(&self) -> &R {
44        self.resources.fetch::<R>()
45    }
46
47    #[inline]
48    pub fn resource_mut<R: Resource>(&mut self) -> &mut R {
49        self.resources.fetch_mut::<R>()
50    }
51
52    /// # Panics
53    pub fn message_mut<M: Message>(&mut self) -> &mut Messages<M> {
54        self.messages.get_mut::<M>().expect("Failed to get message")
55    }
56
57    /// # Panics
58    pub fn message<M: Message>(&mut self) -> &Messages<M> {
59        self.messages.get::<M>().expect("Failed to get message")
60    }
61}