deno.land / x / deno@v1.28.2 / cli / napi / mod.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
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
#![allow(unused_mut)]#![allow(non_camel_case_types)]#![allow(clippy::undocumented_unsafe_blocks)]
//! Symbols to be exported are now defined in this JSON file.//! The `#[napi_sym]` macro checks for missing entries and panics.//!//! `./tools/napi/generate_symbols_list.js` is used to generate the LINK `cli/exports.def` on Windows,//! which is also checked into git.//!//! To add a new napi function://! 1. Place `#[napi_sym]` on top of your implementation.//! 2. Add the function's identifier to this JSON list.//! 3. Finally, run `./tools/napi/generate_symbols_list.js` to update `cli/generated_symbol_exports_list_*.def`.
pub mod r#async;pub mod env;pub mod js_native_api;pub mod threadsafe_functions;pub mod util;
use std::os::raw::c_int;use std::os::raw::c_void;
pub type uv_async_t = *mut uv_async;pub type uv_loop_t = *mut c_void;pub type uv_async_cb = extern "C" fn(handle: uv_async_t);
use deno_core::futures::channel::mpsc;#[repr(C)]pub struct uv_async { pub data: Option<*mut c_void>, callback: uv_async_cb, sender: Option< mpsc::UnboundedSender<deno_runtime::deno_napi::PendingNapiAsyncWork>, >, ref_sender: Option< mpsc::UnboundedSender<deno_runtime::deno_napi::ThreadSafeFunctionStatus>, >,}
#[no_mangle]pub extern "C" fn uv_default_loop() -> uv_loop_t { std::ptr::null_mut()}
/// # Safety/// libuv APIs#[no_mangle]pub unsafe extern "C" fn uv_async_init( _loop: uv_loop_t, async_: uv_async_t, cb: uv_async_cb,) -> c_int { (*async_).callback = cb; deno_runtime::deno_napi::ASYNC_WORK_SENDER.with(|sender| { (*async_).sender = Some(sender.borrow().clone().unwrap()); });
deno_runtime::deno_napi::THREAD_SAFE_FN_SENDER.with(|sender| { sender .borrow() .clone() .unwrap() .unbounded_send(deno_runtime::deno_napi::ThreadSafeFunctionStatus::Alive) .unwrap(); (*async_).ref_sender = Some(sender.borrow().clone().unwrap()); });
0}
/// # Safety/// libuv APIs#[no_mangle]pub unsafe extern "C" fn uv_async_send(async_: uv_async_t) -> c_int { let sender = (*async_).sender.as_ref().unwrap(); let fut = Box::new(move || { ((*async_).callback)(async_); });
match sender.unbounded_send(fut) { Ok(_) => 0, Err(_) => 1, }}
deno

Version Info

Tagged at
a year ago