From 0b2e0cfacab693e0ddbc1461fbf2190d373197af Mon Sep 17 00:00:00 2001 From: Nathan Lilienthal Date: Wed, 9 Oct 2024 14:06:56 -0400 Subject: [PATCH] bevy_reflect: Add crate level `functions` feature docs (#15086) Adds the missing section for the `functions` cargo feature of the `bevy_reflect` crate. --- crates/bevy_reflect/src/lib.rs | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/crates/bevy_reflect/src/lib.rs b/crates/bevy_reflect/src/lib.rs index a54fb68c19974..6931309a54417 100644 --- a/crates/bevy_reflect/src/lib.rs +++ b/crates/bevy_reflect/src/lib.rs @@ -454,15 +454,11 @@ //! but [`Reflect`] requires all types to have a `'static` lifetime. //! This makes it impossible to reflect any type with non-static borrowed data. //! -//! ## Function Reflection +//! ## Generic Function Reflection //! -//! Another limitation is the inability to fully reflect functions and methods. -//! Most languages offer some way of calling methods dynamically, -//! but Rust makes this very difficult to do. -//! For non-generic methods, this can be done by registering custom [type data] that -//! contains function pointers. -//! For generic methods, the same can be done but will typically require manual monomorphization -//! (i.e. manually specifying the types the generic method can take). +//! Another limitation is the inability to reflect over generic functions directly. It can be done, but will +//! typically require manual monomorphization (i.e. manually specifying the types the generic method can +//! take). //! //! ## Manual Registration //! @@ -485,6 +481,17 @@ //! These dependencies are used by the [Bevy] game engine and must define their reflection implementations //! within this crate due to Rust's [orphan rule]. //! +//! ## `functions` +//! +//! | Default | Dependencies | +//! | :-----: | :-------------------------------: | +//! | ❌ | [`bevy_reflect_derive/functions`] | +//! +//! This feature allows creating a [`DynamicFunction`] or [`DynamicFunctionMut`] from Rust functions. Dynamic +//! functions can then be called with valid [`ArgList`]s. +//! +//! For more information, read the [`func`] module docs. +//! //! ## `documentation` //! //! | Default | Dependencies | @@ -540,6 +547,10 @@ //! [`smallvec`]: https://docs.rs/smallvec/latest/smallvec/ //! [orphan rule]: https://doc.rust-lang.org/book/ch10-02-traits.html#implementing-a-trait-on-a-type:~:text=But%20we%20can%E2%80%99t,implementation%20to%20use. //! [`bevy_reflect_derive/documentation`]: bevy_reflect_derive +//! [`bevy_reflect_derive/functions`]: bevy_reflect_derive +//! [`DynamicFunction`]: crate::func::DynamicFunction +//! [`DynamicFunctionMut`]: crate::func::DynamicFunctionMut +//! [`ArgList`]: crate::func::ArgList //! [derive `Reflect`]: derive@crate::Reflect extern crate alloc;