deno.land / x / deno@v1.28.2 / test_napi / src / callback.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
use napi_sys::Status::napi_ok;use napi_sys::ValueType::napi_function;use napi_sys::ValueType::napi_object;use napi_sys::*;use std::ptr;
/// `test_callback_run((a, b) => a + b, [1, 2])` => 3extern "C" fn test_callback_run( env: napi_env, info: napi_callback_info,) -> napi_value { let (args, argc, _) = crate::get_callback_info!(env, info, 2); assert_eq!(argc, 2);
let mut ty = -1; assert!(unsafe { napi_typeof(env, args[0], &mut ty) } == napi_ok); assert_eq!(ty, napi_function);
let mut ty = -1; assert!(unsafe { napi_typeof(env, args[1], &mut ty) } == napi_ok); assert_eq!(ty, napi_object);
let mut len = 0; assert!(unsafe { napi_get_array_length(env, args[1], &mut len) } == napi_ok);
let mut argv = Vec::with_capacity(len as usize); for index in 0..len { let mut value: napi_value = ptr::null_mut(); assert!( unsafe { napi_get_element(env, args[1], index, &mut value) } == napi_ok ); argv.push(value); } let mut global: napi_value = ptr::null_mut(); assert!(unsafe { napi_get_global(env, &mut global) } == napi_ok);
let mut result: napi_value = ptr::null_mut(); assert!( unsafe { napi_call_function( env, global, args[0], argv.len(), argv.as_mut_ptr(), &mut result, ) } == napi_ok );
result}
extern "C" fn test_callback_run_with_recv( env: napi_env, info: napi_callback_info,) -> napi_value { let (args, argc, _) = crate::get_callback_info!(env, info, 3); assert_eq!(argc, 3);
let mut ty = -1; assert!(unsafe { napi_typeof(env, args[0], &mut ty) } == napi_ok); assert_eq!(ty, napi_function);
let mut ty = -1; assert!(unsafe { napi_typeof(env, args[1], &mut ty) } == napi_ok); assert_eq!(ty, napi_object);
let mut len = 0; assert!(unsafe { napi_get_array_length(env, args[1], &mut len) } == napi_ok);
let mut argv = Vec::with_capacity(len as usize); for index in 0..len { let mut value: napi_value = ptr::null_mut(); assert!( unsafe { napi_get_element(env, args[1], index, &mut value) } == napi_ok ); argv.push(value); }
let mut result: napi_value = ptr::null_mut(); assert!( unsafe { napi_call_function( env, args[2], // recv args[0], // cb argv.len(), argv.as_mut_ptr(), &mut result, ) } == napi_ok );
result}
pub fn init(env: napi_env, exports: napi_value) { let properties = &[ crate::new_property!(env, "test_callback_run\0", test_callback_run), crate::new_property!( env, "test_callback_run_with_recv\0", test_callback_run_with_recv ), ];
unsafe { napi_define_properties(env, exports, properties.len(), properties.as_ptr()) };}
deno

Version Info

Tagged at
a year ago