@@ -101,57 +101,60 @@ pub fn make_sys_central_code(api: &ExtensionApi, ctx: &mut Context) -> TokenStre
101
101
}
102
102
}
103
103
104
- pub fn make_core_central_code ( api : & ExtensionApi , ctx : & mut Context ) -> TokenStream {
104
+ pub fn make_core_central_code ( api : & ExtensionApi , ctx : & mut Context ) -> ( TokenStream , String ) {
105
105
let VariantEnums {
106
106
variant_ty_enumerators_pascal,
107
107
variant_ty_enumerators_rust,
108
108
..
109
109
} = make_variant_enums ( api, ctx) ;
110
110
111
- let global_enum_defs = make_global_enums ( api) ;
111
+ let ( global_enum_defs, warning ) = make_global_enums ( api) ;
112
112
113
113
// TODO impl Clone, Debug, PartialEq, PartialOrd, Hash for VariantDispatch
114
114
// TODO could use try_to().unwrap_unchecked(), since type is already verified. Also directly overload from_variant().
115
115
// But this requires that all the variant types support this.
116
- quote ! {
117
- use crate :: builtin:: * ;
118
- use crate :: engine:: Object ;
119
- use crate :: obj:: Gd ;
120
-
121
- #[ allow( dead_code) ]
122
- pub enum VariantDispatch {
123
- Nil ,
124
- #(
125
- #variant_ty_enumerators_pascal( #variant_ty_enumerators_rust) ,
126
- ) *
127
- }
128
-
129
- #[ cfg( FALSE ) ]
130
- impl FromVariant for VariantDispatch {
131
- fn try_from_variant( variant: & Variant ) -> Result <Self , VariantConversionError > {
132
- let dispatch = match variant. get_type( ) {
133
- VariantType :: Nil => Self :: Nil ,
134
- #(
135
- VariantType :: #variant_ty_enumerators_pascal
136
- => Self :: #variant_ty_enumerators_pascal( variant. to:: <#variant_ty_enumerators_rust>( ) ) ,
137
- ) *
138
- } ;
116
+ (
117
+ quote ! {
118
+ use crate :: builtin:: * ;
119
+ use crate :: engine:: Object ;
120
+ use crate :: obj:: Gd ;
121
+
122
+ #[ allow( dead_code) ]
123
+ pub enum VariantDispatch {
124
+ Nil ,
125
+ #(
126
+ #variant_ty_enumerators_pascal( #variant_ty_enumerators_rust) ,
127
+ ) *
128
+ }
139
129
140
- Ok ( dispatch)
130
+ #[ cfg( FALSE ) ]
131
+ impl FromVariant for VariantDispatch {
132
+ fn try_from_variant( variant: & Variant ) -> Result <Self , VariantConversionError > {
133
+ let dispatch = match variant. get_type( ) {
134
+ VariantType :: Nil => Self :: Nil ,
135
+ #(
136
+ VariantType :: #variant_ty_enumerators_pascal
137
+ => Self :: #variant_ty_enumerators_pascal( variant. to:: <#variant_ty_enumerators_rust>( ) ) ,
138
+ ) *
139
+ } ;
140
+
141
+ Ok ( dispatch)
142
+ }
141
143
}
142
- }
143
144
144
- /// Global enums and constants.
145
- ///
146
- /// A list of global-scope enumerated constants.
147
- /// For global built-in functions, check out the [`utilities` module][crate::engine::utilities].
148
- ///
149
- /// See also [Godot docs for `@GlobalScope`](https://docs.godotengine.org/en/stable/classes/[email protected] #enumerations).
150
- pub mod global {
151
- use crate :: sys;
152
- #( #global_enum_defs ) *
153
- }
154
- }
145
+ /// Global enums and constants.
146
+ ///
147
+ /// A list of global-scope enumerated constants.
148
+ /// For global built-in functions, check out the [`utilities` module][crate::engine::utilities].
149
+ ///
150
+ /// See also [Godot docs for `@GlobalScope`](https://docs.godotengine.org/en/stable/classes/[email protected] #enumerations).
151
+ pub mod global {
152
+ use crate :: sys;
153
+ #( #global_enum_defs ) *
154
+ }
155
+ } ,
156
+ warning,
157
+ )
155
158
}
156
159
157
160
// ----------------------------------------------------------------------------------------------------------------------------------------------
@@ -248,18 +251,20 @@ fn make_variant_enums(api: &ExtensionApi, ctx: &mut Context) -> VariantEnums {
248
251
result
249
252
}
250
253
251
- fn make_global_enums ( api : & ExtensionApi ) -> Vec < TokenStream > {
254
+ fn make_global_enums ( api : & ExtensionApi ) -> ( Vec < TokenStream > , String ) {
252
255
let mut global_enum_defs = vec ! [ ] ;
256
+ let mut warning = String :: new ( ) ;
253
257
254
258
for enum_ in api. global_enums . iter ( ) {
255
259
// Skip those enums which are already manually handled.
256
260
if enum_. name == "VariantType" || enum_. name == "VariantOperator" {
257
261
continue ;
258
262
}
259
263
260
- let def = enums:: make_enum_definition ( enum_) ;
264
+ let ( def, warn ) = enums:: make_enum_definition ( enum_) ;
261
265
global_enum_defs. push ( def) ;
266
+ warning. push_str ( & warn)
262
267
}
263
268
264
- global_enum_defs
269
+ ( global_enum_defs, warning )
265
270
}
0 commit comments