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.)