@@ -28,7 +28,6 @@ extern crate "grust-GLib-2_0" as glib;
28
28
extern crate "grust-GObject-2_0" as gobject;
29
29
extern crate libc;
30
30
31
- use grust:: callback;
32
31
use grust:: error;
33
32
use grust:: gstr;
34
33
use grust:: gstr:: IntoUtf8 ;
@@ -37,11 +36,12 @@ use grust::marker;
37
36
use grust:: object;
38
37
use grust:: quark;
39
38
use grust:: refcount;
40
- use grust:: types;
39
+ use grust:: types:: { gint , gpointer } ;
41
40
use grust:: wrap;
42
41
43
42
use std:: fmt;
44
43
use std:: num:: FromPrimitive ;
44
+ use std:: mem;
45
45
use std:: sync:: atomic;
46
46
47
47
#[ repr( C ) ]
@@ -192,26 +192,28 @@ pub mod raw {
192
192
}
193
193
}
194
194
195
- mod async_shim {
196
-
197
- use grust:: callback;
198
- use grust:: types:: gpointer;
199
- use grust:: wrap;
200
-
195
+ mod async {
201
196
use super :: raw;
202
197
use gobject;
203
198
204
- pub extern "C" fn async_ready_callback ( source_object : * mut gobject:: raw:: GObject ,
205
- res : * mut raw:: GAsyncResult ,
206
- user_data : gpointer ) {
207
- unsafe {
208
- let arg1 = wrap:: from_raw_mut :: < gobject:: Object , _ > (
209
- source_object, & source_object) ;
210
- let arg2 = wrap:: from_raw_mut :: < super :: AsyncResult , _ > (
211
- res, & res) ;
199
+ use grust:: types:: gpointer;
200
+ use grust:: wrap;
201
+ use std:: mem;
212
202
213
- callback:: invoke ( user_data, ( arg1, arg2) )
214
- }
203
+ pub extern "C" fn async_ready_callback < F > ( source_object : * mut gobject:: raw:: GObject ,
204
+ res : * mut raw:: GAsyncResult ,
205
+ user_data : gpointer )
206
+ where F : FnOnce ( & mut gobject:: Object , & mut super :: AsyncResult ) + Send
207
+ {
208
+ let cb: Box < F > = unsafe { mem:: transmute ( user_data) } ;
209
+ let arg1 = unsafe {
210
+ wrap:: from_raw_mut :: < gobject:: Object , _ > ( source_object,
211
+ & source_object)
212
+ } ;
213
+ let arg2 = unsafe {
214
+ wrap:: from_raw_mut :: < super :: AsyncResult , _ > ( res, & res)
215
+ } ;
216
+ cb ( arg1, arg2) ;
215
217
}
216
218
}
217
219
@@ -339,7 +341,7 @@ impl File {
339
341
}
340
342
341
343
pub fn read_async < F > ( & mut self ,
342
- io_priority : types :: gint ,
344
+ io_priority : gint ,
343
345
cancellable : Option < & mut Cancellable > ,
344
346
callback : Box < F > )
345
347
where F : FnOnce ( & mut gobject:: Object , & mut AsyncResult ) + Send
@@ -352,12 +354,12 @@ impl File {
352
354
None => std:: ptr:: null_mut ( )
353
355
}
354
356
} ;
355
- let callback = callback :: AsyncCallback :: new ( callback) . into_raw_ptr ( ) ;
357
+ let callback: gpointer = mem :: transmute ( callback) ;
356
358
357
359
raw:: g_file_read_async ( & mut self . raw ,
358
360
io_priority as libc:: c_int ,
359
361
cancellable,
360
- async_shim :: async_ready_callback,
362
+ async :: async_ready_callback :: < F > ,
361
363
callback) ;
362
364
}
363
365
}
0 commit comments