muds/ecs/
resource.rs

1//! Resource registry types.
2
3use super::registry::{Ref, RefMut};
4use core::any::Any;
5
6/// Registry of resources.
7pub trait Resources {
8    /// Registers a resource type.
9    ///
10    /// # Examples
11    /// ```rust
12    /// # use muds::ecs::{Registry, Resources};
13    /// let mut registry = Registry::default();
14    /// registry.register_resource(1u32);
15    /// ```
16    fn register_resource<R: Any>(&mut self, value: R);
17
18    /// Returns if a resource type is registered.
19    ///
20    /// # Examples
21    /// ```rust
22    /// # use muds::ecs::{Registry, Resources};
23    /// let mut registry = Registry::default();
24    /// registry.register_resource(1u32);
25    /// assert!(registry.has_resource::<u32>());
26    /// ```
27    fn has_resource<R: Any>(&self) -> bool;
28
29    /// Gets a resource.
30    ///
31    /// # Examples
32    /// ```rust
33    /// # use muds::ecs::{Registry, Resources};
34    /// let mut registry = Registry::default();
35    /// registry.register_resource(1u32);
36    /// assert_eq!(*registry.resource::<u32>(), 1u32);
37    /// ```
38    fn resource<'a, R: Any>(&'a self) -> Ref<'a, R>;
39
40    /// Gets a resource mutably.
41    ///
42    /// # Examples
43    /// ```rust
44    /// # use muds::ecs::{Registry, Resources};
45    /// let mut registry = Registry::default();
46    /// registry.register_resource(1u32);
47    /// *registry.resource_mut::<u32>() = 2u32;
48    /// assert_eq!(*registry.resource::<u32>(), 2u32);
49    /// ```
50    fn resource_mut<'a, R: Any>(&'a self) -> RefMut<'a, R>;
51}