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}