No easy way to #[export] custom types · Issue #227 · godot-rust/gdext (original) (raw)

I do not know if this is a bug, but at the very least it is very unintuitive.

This works:

#[derive(Copy, Clone)] #[repr(i32)] pub enum Alignment { Left = 0, Center = 1, Right = 2, }

impl VariantMetadata for Alignment { fn variant_type() -> VariantType { VariantType::Int }

fn param_metadata() -> GDExtensionClassMethodArgumentMetadata {
    GDEXTENSION_METHOD_ARGUMENT_METADATA_INT_IS_INT32
}

}

#[derive(GodotClass)] #[class(base=Control)] pub struct Foo { #[export] bar: Array, }

However, this does not (compiler error attached):

#[derive(Copy, Clone)] #[repr(i32)] pub enum Alignment { Left = 0, Center = 1, Right = 2, }

impl VariantMetadata for Alignment { fn variant_type() -> VariantType { VariantType::Int }

fn param_metadata() -> GDExtensionClassMethodArgumentMetadata {
    GDEXTENSION_METHOD_ARGUMENT_METADATA_INT_IS_INT32
}

}

#[derive(GodotClass)] #[class(base=Control)] pub struct Foo { #[export] bar: Alignment, }

The only difference is that the former uses Array<Alignment>, while the latter uses raw Alignment.

The error:
out.txt