@@ -11,11 +11,23 @@ macro_rules! godot_wrap_method_parameter_count {
11
11
}
12
12
}
13
13
14
+ #[ doc( hidden) ]
15
+ #[ macro_export]
16
+ macro_rules! godot_wrap_method_if_deref {
17
+ ( true , $ret: expr) => {
18
+ std:: ops:: Deref :: deref( & $ret)
19
+ } ;
20
+ ( false , $ret: expr) => {
21
+ $ret
22
+ } ;
23
+ }
24
+
14
25
#[ doc( hidden) ]
15
26
#[ macro_export]
16
27
macro_rules! godot_wrap_method_inner {
17
28
(
18
29
$type_name: ty,
30
+ $is_deref_return: ident,
19
31
$map_method: ident,
20
32
fn $method_name: ident(
21
33
$self: ident,
@@ -56,7 +68,9 @@ macro_rules! godot_wrap_method_inner {
56
68
$( $pname, ) *
57
69
$( $opt_pname, ) *
58
70
) ;
59
- gdnative:: core_types:: OwnedToVariant :: owned_to_variant( ret)
71
+ gdnative:: core_types:: OwnedToVariant :: owned_to_variant(
72
+ $crate:: godot_wrap_method_if_deref!( $is_deref_return, ret)
73
+ )
60
74
}
61
75
} )
62
76
. unwrap_or_else( |err| {
@@ -83,6 +97,7 @@ macro_rules! godot_wrap_method {
83
97
// mutable
84
98
(
85
99
$type_name: ty,
100
+ $is_deref_return: ident,
86
101
fn $method_name: ident(
87
102
& mut $self: ident,
88
103
$owner: ident : $owner_ty: ty
@@ -93,6 +108,7 @@ macro_rules! godot_wrap_method {
93
108
) => {
94
109
$crate:: godot_wrap_method_inner!(
95
110
$type_name,
111
+ $is_deref_return,
96
112
map_mut,
97
113
fn $method_name(
98
114
$self,
@@ -105,6 +121,7 @@ macro_rules! godot_wrap_method {
105
121
// immutable
106
122
(
107
123
$type_name: ty,
124
+ $is_deref_return: ident,
108
125
fn $method_name: ident(
109
126
& $self: ident,
110
127
$owner: ident : $owner_ty: ty
@@ -115,6 +132,7 @@ macro_rules! godot_wrap_method {
115
132
) => {
116
133
$crate:: godot_wrap_method_inner!(
117
134
$type_name,
135
+ $is_deref_return,
118
136
map,
119
137
fn $method_name(
120
138
$self,
@@ -127,6 +145,7 @@ macro_rules! godot_wrap_method {
127
145
// owned
128
146
(
129
147
$type_name: ty,
148
+ $is_deref_return: ident,
130
149
fn $method_name: ident(
131
150
mut $self: ident,
132
151
$owner: ident : $owner_ty: ty
@@ -137,6 +156,7 @@ macro_rules! godot_wrap_method {
137
156
) => {
138
157
$crate:: godot_wrap_method_inner!(
139
158
$type_name,
159
+ $is_deref_return,
140
160
map_owned,
141
161
fn $method_name(
142
162
$self,
@@ -149,6 +169,7 @@ macro_rules! godot_wrap_method {
149
169
// owned
150
170
(
151
171
$type_name: ty,
172
+ $is_deref_return: ident,
152
173
fn $method_name: ident(
153
174
$self: ident,
154
175
$owner: ident : $owner_ty: ty
@@ -159,6 +180,7 @@ macro_rules! godot_wrap_method {
159
180
) => {
160
181
$crate:: godot_wrap_method_inner!(
161
182
$type_name,
183
+ $is_deref_return,
162
184
map_owned,
163
185
fn $method_name(
164
186
$self,
@@ -171,6 +193,7 @@ macro_rules! godot_wrap_method {
171
193
// mutable without return type
172
194
(
173
195
$type_name: ty,
196
+ $is_deref_return: ident,
174
197
fn $method_name: ident(
175
198
& mut $self: ident,
176
199
$owner: ident : $owner_ty: ty
@@ -181,6 +204,7 @@ macro_rules! godot_wrap_method {
181
204
) => {
182
205
$crate:: godot_wrap_method!(
183
206
$type_name,
207
+ $is_deref_return,
184
208
fn $method_name(
185
209
& mut $self,
186
210
$owner: $owner_ty
@@ -192,6 +216,7 @@ macro_rules! godot_wrap_method {
192
216
// immutable without return type
193
217
(
194
218
$type_name: ty,
219
+ $is_deref_return: ident,
195
220
fn $method_name: ident(
196
221
& $self: ident,
197
222
$owner: ident : $owner_ty: ty
@@ -202,6 +227,7 @@ macro_rules! godot_wrap_method {
202
227
) => {
203
228
$crate:: godot_wrap_method!(
204
229
$type_name,
230
+ $is_deref_return,
205
231
fn $method_name(
206
232
& $self,
207
233
$owner: $owner_ty
@@ -213,6 +239,7 @@ macro_rules! godot_wrap_method {
213
239
// owned without return type
214
240
(
215
241
$type_name: ty,
242
+ $is_deref_return: ident,
216
243
fn $method_name: ident(
217
244
mut $self: ident,
218
245
$owner: ident : $owner_ty: ty
@@ -223,6 +250,7 @@ macro_rules! godot_wrap_method {
223
250
) => {
224
251
$crate:: godot_wrap_method!(
225
252
$type_name,
253
+ $is_deref_return,
226
254
fn $method_name(
227
255
$self,
228
256
$owner: $owner_ty
@@ -234,6 +262,7 @@ macro_rules! godot_wrap_method {
234
262
// owned without return type
235
263
(
236
264
$type_name: ty,
265
+ $is_deref_return: ident,
237
266
fn $method_name: ident(
238
267
$self: ident,
239
268
$owner: ident : $owner_ty: ty
@@ -244,6 +273,7 @@ macro_rules! godot_wrap_method {
244
273
) => {
245
274
$crate:: godot_wrap_method!(
246
275
$type_name,
276
+ $is_deref_return,
247
277
fn $method_name(
248
278
$self,
249
279
$owner: $owner_ty
0 commit comments