@@ -37,9 +37,9 @@ macro_rules! godot_wrap_method_inner {
37
37
$is_deref_return: ident,
38
38
$map_method: ident,
39
39
fn $method_name: ident(
40
- $self: ident,
41
- $owner: ident : $owner_ty: ty
42
- $( , $pname: ident : $pty: ty) *
40
+ $self: ident
41
+ , $owner: ident : $owner_ty: ty
42
+ $( , $pname: ident : $pty: ty) *
43
43
$( , #[ opt] $opt_pname: ident : $opt_pty: ty) *
44
44
) -> $retty: ty
45
45
) => {
@@ -97,6 +97,17 @@ macro_rules! godot_wrap_method_inner {
97
97
} ;
98
98
}
99
99
100
+ #[ doc( hidden) ]
101
+ #[ macro_export]
102
+ macro_rules! godot_wrap_method_return_type {
103
+ ( ) => {
104
+ ( )
105
+ } ;
106
+ ( $retty: ty) => {
107
+ $retty: ty
108
+ } ;
109
+ }
110
+
100
111
/// Convenience macro to wrap an object's method into a function pointer
101
112
/// that can be passed to the engine when registering a class.
102
113
#[ macro_export]
@@ -106,187 +117,95 @@ macro_rules! godot_wrap_method {
106
117
$type_name: ty,
107
118
$is_deref_return: ident,
108
119
fn $method_name: ident(
109
- & mut $self: ident,
110
- $owner: ident : $owner_ty: ty
111
- $( , $pname: ident : $pty: ty) *
112
- $( , #[ opt] $opt_pname: ident : $opt_pty: ty) *
120
+ & mut $self: ident
121
+ , $owner: ident : $owner_ty: ty
122
+ $( , $pname: ident : $pty: ty) *
123
+ $( , #[ opt] $opt_pname: ident : $opt_pty: ty) *
113
124
$( , ) ?
114
- ) -> $retty: ty
125
+ ) $ ( -> $retty: ty) ?
115
126
) => {
116
127
$crate:: godot_wrap_method_inner!(
117
128
$type_name,
118
129
$is_deref_return,
119
130
map_mut,
120
131
fn $method_name(
121
- $self,
122
- $owner: $owner_ty
123
- $( , $pname : $pty) *
124
- $( , #[ opt] $opt_pname : $opt_pty) *
125
- ) -> $ retty
132
+ $self
133
+ , $owner : $owner_ty
134
+ $( , $pname : $pty) *
135
+ $( , #[ opt] $opt_pname : $opt_pty) *
136
+ ) -> godot_wrap_method_return_type! ( $ ( $ retty) ? )
126
137
)
127
138
} ;
128
139
// immutable
129
140
(
130
141
$type_name: ty,
131
142
$is_deref_return: ident,
132
143
fn $method_name: ident(
133
- & $self: ident,
134
- $owner: ident : $owner_ty: ty
135
- $( , $pname: ident : $pty: ty) *
136
- $( , #[ opt] $opt_pname: ident : $opt_pty: ty) *
144
+ & $self: ident
145
+ , $owner: ident : $owner_ty: ty
146
+ $( , $pname: ident : $pty: ty) *
147
+ $( , #[ opt] $opt_pname: ident : $opt_pty: ty) *
137
148
$( , ) ?
138
- ) -> $retty: ty
149
+ ) $ ( -> $retty: ty) ?
139
150
) => {
140
151
$crate:: godot_wrap_method_inner!(
141
152
$type_name,
142
153
$is_deref_return,
143
154
map,
144
155
fn $method_name(
145
- $self,
146
- $owner: $owner_ty
147
- $( , $pname : $pty) *
148
- $( , #[ opt] $opt_pname : $opt_pty) *
149
- ) -> $ retty
156
+ $self
157
+ , $owner : $owner_ty
158
+ $( , $pname : $pty) *
159
+ $( , #[ opt] $opt_pname : $opt_pty) *
160
+ ) -> godot_wrap_method_return_type! ( $ ( $ retty) ? )
150
161
)
151
162
} ;
152
163
// owned
153
164
(
154
165
$type_name: ty,
155
166
$is_deref_return: ident,
156
167
fn $method_name: ident(
157
- mut $self: ident,
158
- $owner: ident : $owner_ty: ty
159
- $( , $pname: ident : $pty: ty) *
160
- $( , #[ opt] $opt_pname: ident : $opt_pty: ty) *
168
+ mut $self: ident
169
+ , $owner: ident : $owner_ty: ty
170
+ $( , $pname: ident : $pty: ty) *
171
+ $( , #[ opt] $opt_pname: ident : $opt_pty: ty) *
161
172
$( , ) ?
162
- ) -> $retty: ty
173
+ ) $ ( -> $retty: ty) ?
163
174
) => {
164
175
$crate:: godot_wrap_method_inner!(
165
176
$type_name,
166
177
$is_deref_return,
167
178
map_owned,
168
179
fn $method_name(
169
- $self,
170
- $owner: $owner_ty
171
- $( , $pname : $pty) *
172
- $( , #[ opt] $opt_pname : $opt_pty) *
173
- ) -> $ retty
180
+ $self
181
+ , $owner : $owner_ty
182
+ $( , $pname : $pty) *
183
+ $( , #[ opt] $opt_pname : $opt_pty) *
184
+ ) -> godot_wrap_method_return_type! ( $ ( $ retty) ? )
174
185
)
175
186
} ;
176
187
// owned
177
188
(
178
189
$type_name: ty,
179
190
$is_deref_return: ident,
180
191
fn $method_name: ident(
181
- $self: ident,
182
- $owner: ident : $owner_ty: ty
183
- $( , $pname: ident : $pty: ty) *
184
- $( , #[ opt] $opt_pname: ident : $opt_pty: ty) *
192
+ $self: ident
193
+ , $owner: ident : $owner_ty: ty
194
+ $( , $pname: ident : $pty: ty) *
195
+ $( , #[ opt] $opt_pname: ident : $opt_pty: ty) *
185
196
$( , ) ?
186
- ) -> $retty: ty
197
+ ) $ ( -> $retty: ty) ?
187
198
) => {
188
199
$crate:: godot_wrap_method_inner!(
189
200
$type_name,
190
201
$is_deref_return,
191
202
map_owned,
192
203
fn $method_name(
193
- $self,
194
- $owner: $owner_ty
195
- $( , $pname : $pty) *
196
- $( , #[ opt] $opt_pname : $opt_pty) *
197
- ) -> $retty
198
- )
199
- } ;
200
- // mutable without return type
201
- (
202
- $type_name: ty,
203
- $is_deref_return: ident,
204
- fn $method_name: ident(
205
- & mut $self: ident,
206
- $owner: ident : $owner_ty: ty
207
- $( , $pname: ident : $pty: ty) *
208
- $( , #[ opt] $opt_pname: ident : $opt_pty: ty) *
209
- $( , ) ?
210
- )
211
- ) => {
212
- $crate:: godot_wrap_method!(
213
- $type_name,
214
- $is_deref_return,
215
- fn $method_name(
216
- & mut $self,
217
- $owner: $owner_ty
218
- $( , $pname : $pty) *
219
- $( , #[ opt] $opt_pname : $opt_pty) *
220
- ) -> ( )
221
- )
222
- } ;
223
- // immutable without return type
224
- (
225
- $type_name: ty,
226
- $is_deref_return: ident,
227
- fn $method_name: ident(
228
- & $self: ident,
229
- $owner: ident : $owner_ty: ty
230
- $( , $pname: ident : $pty: ty) *
231
- $( , #[ opt] $opt_pname: ident : $opt_pty: ty) *
232
- $( , ) ?
233
- )
234
- ) => {
235
- $crate:: godot_wrap_method!(
236
- $type_name,
237
- $is_deref_return,
238
- fn $method_name(
239
- & $self,
240
- $owner: $owner_ty
241
- $( , $pname : $pty) *
242
- $( , #[ opt] $opt_pname : $opt_pty) *
243
- ) -> ( )
244
- )
245
- } ;
246
- // owned without return type
247
- (
248
- $type_name: ty,
249
- $is_deref_return: ident,
250
- fn $method_name: ident(
251
- mut $self: ident,
252
- $owner: ident : $owner_ty: ty
253
- $( , $pname: ident : $pty: ty) *
254
- $( , #[ opt] $opt_pname: ident : $opt_pty: ty) *
255
- $( , ) ?
256
- )
257
- ) => {
258
- $crate:: godot_wrap_method!(
259
- $type_name,
260
- $is_deref_return,
261
- fn $method_name(
262
- $self,
263
- $owner: $owner_ty
264
- $( , $pname : $pty) *
265
- $( , #[ opt] $opt_pname : $opt_pty) *
266
- ) -> ( )
267
- )
268
- } ;
269
- // owned without return type
270
- (
271
- $type_name: ty,
272
- $is_deref_return: ident,
273
- fn $method_name: ident(
274
- $self: ident,
275
- $owner: ident : $owner_ty: ty
276
- $( , $pname: ident : $pty: ty) *
277
- $( , #[ opt] $opt_pname: ident : $opt_pty: ty) *
278
- $( , ) ?
279
- )
280
- ) => {
281
- $crate:: godot_wrap_method!(
282
- $type_name,
283
- $is_deref_return,
284
- fn $method_name(
285
- $self,
286
- $owner: $owner_ty
287
- $( , $pname : $pty) *
288
- $( , #[ opt] $opt_pname : $opt_pty) *
289
- ) -> ( )
204
+ $self
205
+ , $owner : $owner_ty
206
+ $( , $pname : $pty) *
207
+ $( , #[ opt] $opt_pname : $opt_pty) *
208
+ ) -> godot_wrap_method_return_type!( $( $retty) ?)
290
209
)
291
210
} ;
292
211
}
0 commit comments