From 783d7980b736e4be56d88c6d2d8670a1e4567f87 Mon Sep 17 00:00:00 2001 From: Jovan Gerodetti Date: Thu, 18 Jul 2024 15:48:03 +0200 Subject: [PATCH] Support enum exports (#42) --- derive/src/attribute_ops.rs | 18 ++++++++++++++++++ rust-script/tests/script_derive.rs | 3 +++ 2 files changed, 21 insertions(+) diff --git a/derive/src/attribute_ops.rs b/derive/src/attribute_ops.rs index 500aab6..91f4b60 100644 --- a/derive/src/attribute_ops.rs +++ b/derive/src/attribute_ops.rs @@ -19,6 +19,7 @@ pub struct FieldExportOps { dir: bool, exp_easing: Option, file: Option, + enum_options: Option, flags: Option, #[darling(default)] global_dir: bool, @@ -101,6 +102,23 @@ impl FieldExportOps { result = Some((field, quote!(#property_hints::FILE), filters.join(","))); } + if let Some(list) = self.enum_options.as_ref() { + let field = "enum"; + + if let Some((active_field, _, _)) = result { + return Self::error(span, active_field, field); + } + + let flags = list + .elems + .iter() + .map(String::from_expr) + .collect::, _>>() + .map_err(|err| err.write_errors())?; + + result = Some((field, quote!(#property_hints::ENUM), flags.join(","))); + } + if let Some(list) = self.flags.as_ref() { let field = "flags"; diff --git a/rust-script/tests/script_derive.rs b/rust-script/tests/script_derive.rs index ba9f9b5..bbdfafc 100644 --- a/rust-script/tests/script_derive.rs +++ b/rust-script/tests/script_derive.rs @@ -16,6 +16,9 @@ struct TestScript { #[export] pub editor_prop: u16, + #[export(enum_options = ["inactive", "water", "teargas"])] + pub enum_prop: u8, + base: Gd, }