Attribute Macro godot_dyn
#[godot_dyn]
Expand description
Generates a Class
-> dyn Trait
upcasting relation.
This attribute macro can be applied to impl MyTrait for MyClass
blocks, where MyClass
is a GodotClass
. It will automatically
implement MyClass: AsDyn<dyn MyTrait>
for you.
Establishing this relation allows godot-rust to upcast MyGodotClass
to dyn Trait
inside the library’s
DynGd
smart pointer.
§Code generation
Given the following code,
use godot::prelude::*;
#[derive(GodotClass)]
#[class(init)]
struct MyClass {}
trait MyTrait {}
#[godot_dyn]
impl MyTrait for MyClass {}
the macro expands to:
// impl block remains unchanged...
impl MyTrait for MyClass {}
// ...but a new `impl AsDyn` is added.
impl AsDyn<dyn MyTrait> for MyClass {
fn dyn_upcast(&self) -> &(dyn MyTrait + 'static) { self }
fn dyn_upcast_mut(&mut self) -> &mut (dyn MyTrait + 'static) { self }
}
§Orphan rule limitations
Since AsDyn
is always a foreign trait, the #[godot_dyn]
attribute must be used in the same crate as the Godot class’s definition.
(Currently, Godot classes cannot be shared from libraries, but this may change in the future.)