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}