Skip to content

Commit 783d798

Browse files
authored
Support enum exports (#42)
1 parent d613594 commit 783d798

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

derive/src/attribute_ops.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ pub struct FieldExportOps {
1919
dir: bool,
2020
exp_easing: Option<syn::ExprArray>,
2121
file: Option<syn::ExprArray>,
22+
enum_options: Option<syn::ExprArray>,
2223
flags: Option<syn::ExprArray>,
2324
#[darling(default)]
2425
global_dir: bool,
@@ -101,6 +102,23 @@ impl FieldExportOps {
101102
result = Some((field, quote!(#property_hints::FILE), filters.join(",")));
102103
}
103104

105+
if let Some(list) = self.enum_options.as_ref() {
106+
let field = "enum";
107+
108+
if let Some((active_field, _, _)) = result {
109+
return Self::error(span, active_field, field);
110+
}
111+
112+
let flags = list
113+
.elems
114+
.iter()
115+
.map(String::from_expr)
116+
.collect::<Result<Vec<_>, _>>()
117+
.map_err(|err| err.write_errors())?;
118+
119+
result = Some((field, quote!(#property_hints::ENUM), flags.join(",")));
120+
}
121+
104122
if let Some(list) = self.flags.as_ref() {
105123
let field = "flags";
106124

rust-script/tests/script_derive.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ struct TestScript {
1616
#[export]
1717
pub editor_prop: u16,
1818

19+
#[export(enum_options = ["inactive", "water", "teargas"])]
20+
pub enum_prop: u8,
21+
1922
base: Gd<Node>,
2023
}
2124

0 commit comments

Comments
 (0)