limnus_system_state/
lib.rs1use limnus_local_resource::{LocalResource, LocalResourceStorage};
6use limnus_message::{Message, MessageStorage, Messages};
7use limnus_resource::{Resource, ResourceStorage};
8
9#[derive(Debug, Default)]
10pub struct State {
11 resources: ResourceStorage,
12 local_resources: LocalResourceStorage,
13 messages: MessageStorage,
14}
15
16impl State {
17 #[must_use]
18 pub fn new() -> Self {
19 Self {
20 resources: ResourceStorage::new(),
21 messages: MessageStorage::new(),
22 local_resources: LocalResourceStorage::new(),
23 }
24 }
25
26 #[must_use]
27 pub const fn messages(&self) -> &MessageStorage {
28 &self.messages
29 }
30
31 pub const fn messages_mut(&mut self) -> &mut MessageStorage {
32 &mut self.messages
33 }
34
35 #[must_use]
36 pub const fn resources(&self) -> &ResourceStorage {
37 &self.resources
38 }
39
40 #[must_use]
41 pub const fn resources_mut(&mut self) -> &mut ResourceStorage {
42 &mut self.resources
43 }
44
45 #[must_use]
46 pub const fn local_resources_mut(&mut self) -> &mut LocalResourceStorage {
47 &mut self.local_resources
48 }
49
50 #[must_use]
51 pub const fn local_resources(&self) -> &LocalResourceStorage {
52 &self.local_resources
53 }
54
55 #[inline]
56 #[must_use]
57 pub fn resource<R: Resource>(&self) -> &R {
58 self.resources.fetch::<R>()
59 }
60
61 #[inline]
62 pub fn resource_mut<R: Resource>(&mut self) -> Option<&mut R> {
63 self.resources.get_mut::<R>()
64 }
65
66 #[inline]
67 #[must_use]
68 pub fn local_resource<R: LocalResource>(&self) -> Option<&R> {
69 self.local_resources.get::<R>()
70 }
71
72 #[inline]
73 pub fn local_resource_mut<R: LocalResource>(&mut self) -> Option<&mut R> {
74 self.local_resources.get_mut::<R>()
75 }
76
77 pub fn message_mut<M: Message>(&mut self) -> Option<&mut Messages<M>> {
78 self.messages.get_mut::<M>()
79 }
80
81 #[must_use]
82 pub fn message<M: Message>(&self) -> Option<&Messages<M>> {
83 self.messages.get::<M>()
84 }
85}