moonshine_object/name.rs
1use moonshine_kind::prelude::*;
2
3use crate::{Object, ObjectInstance, ObjectRef};
4
5pub trait ObjectName {
6 /// Returns the [`Name`] of this object.
7 ///
8 /// # Example
9 /// ```
10 /// # use bevy::prelude::*;
11 /// # use moonshine_object::prelude::*;
12 ///
13 /// let mut app = App::new();
14 /// // ...
15 /// app.add_systems(Update, print_names);
16 ///
17 /// fn print_names(objects: Objects) {
18 /// for object in objects.iter() {
19 /// let entity = object.entity();
20 /// let name = object.name().unwrap_or("Unnamed");
21 /// println!("Entity {entity}, Name = {name}");
22 /// }
23 /// }
24 /// ```
25 ///
26 /// [`Name`]: https://docs.rs/bevy/latest/bevy/core/struct.Name.html
27 fn name(&self) -> Option<&str>;
28}
29
30impl<T: Kind> ObjectName for Object<'_, '_, '_, T> {
31 fn name(&self) -> Option<&str> {
32 self.name.get(self.entity()).ok().map(|name| name.as_str())
33 }
34}
35
36impl<T: Kind> ObjectName for ObjectRef<'_, '_, '_, T> {
37 fn name(&self) -> Option<&str> {
38 self.1.name()
39 }
40}