limnus_system_state/
lib.rs

1/*
2 * Copyright (c) Peter Bjorklund. All rights reserved. https://github.com/swamp/limnus
3 * Licensed under the MIT License. See LICENSE in the project root for license information.
4 */
5use 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}