mirror of
https://github.com/bevyengine/bevy
synced 2024-12-21 02:23:08 +00:00
bf765e61b5
# Objective - Contributes to #15460 ## Solution - Added `std` feature (enabled by default) ## Testing - CI - `cargo check -p bevy_reflect --no-default-features --target "x86_64-unknown-none"` - UEFI demo application runs with this branch of `bevy_reflect`, allowing `derive(Reflect)` ## Notes - The [`spin`](https://crates.io/crates/spin) crate has been included to provide `RwLock` and `Once` (as an alternative to `OnceLock`) when the `std` feature is not enabled. Another alternative may be more desirable, please provide feedback if you have a strong opinion here! - Certain items (`Box`, `String`, `ToString`) provided by `alloc` have been added to `__macro_exports` as a way to avoid `alloc` vs `std` namespacing. I'm personally quite annoyed that we can't rely on `alloc` as a crate name in `std` environments within macros. I'd love an alternative to my approach here, but I suspect it's the least-bad option. - I would've liked to have an `alloc` feature (for allocation-free `bevy_reflect`), unfortunately, `erased_serde` unconditionally requires access to `Box`. Maybe one day we could design around this, but for now it just means `bevy_reflect` requires `alloc`. --------- Co-authored-by: Gino Valente <49806985+MrGVSV@users.noreply.github.com> Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
24 lines
569 B
Rust
24 lines
569 B
Rust
use crate::{FromType, Reflect};
|
|
use alloc::boxed::Box;
|
|
|
|
/// A struct used to provide the default value of a type.
|
|
///
|
|
/// A [`ReflectDefault`] for type `T` can be obtained via [`FromType::from_type`].
|
|
#[derive(Clone)]
|
|
pub struct ReflectDefault {
|
|
default: fn() -> Box<dyn Reflect>,
|
|
}
|
|
|
|
impl ReflectDefault {
|
|
pub fn default(&self) -> Box<dyn Reflect> {
|
|
(self.default)()
|
|
}
|
|
}
|
|
|
|
impl<T: Reflect + Default> FromType<T> for ReflectDefault {
|
|
fn from_type() -> Self {
|
|
ReflectDefault {
|
|
default: || Box::<T>::default(),
|
|
}
|
|
}
|
|
}
|