-
Notifications
You must be signed in to change notification settings - Fork 286
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #646 from neon-bindings/kv/dynamic-loading
Dynamic Loading
- Loading branch information
Showing
32 changed files
with
722 additions
and
205 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,26 +1,21 @@ | ||
extern crate cfg_if; | ||
extern crate smallvec; | ||
|
||
#[cfg(all(not(feature = "neon-sys"), not(feature = "nodejs-sys")))] | ||
compile_error!("The Neon runtime must have at least one of the `neon-sys` or `nodejs-sys` backends enabled."); | ||
#[cfg(all(not(feature = "neon-sys"), not(feature = "napi")))] | ||
compile_error!("The Neon runtime must have at least one of the `neon-sys` or `napi` backends enabled."); | ||
|
||
use cfg_if::cfg_if; | ||
|
||
cfg_if! { | ||
if #[cfg(feature = "nodejs-sys")] { | ||
pub extern crate nodejs_sys; | ||
if #[cfg(feature = "napi")] { | ||
pub mod napi; | ||
} | ||
} | ||
|
||
cfg_if! { | ||
if #[cfg(feature = "neon-sys")] { | ||
extern crate neon_sys; | ||
pub mod nan; | ||
// The legacy variant is the default API as long as it's present. | ||
pub use nan::*; | ||
} else if #[cfg(feature = "nodejs-sys")] { | ||
pub use crate::nan::*; | ||
} else if #[cfg(feature = "napi")] { | ||
// The N-API variant is only the default API if the legacy variant is disabled. | ||
pub use napi::*; | ||
pub use crate::napi::*; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,20 +1,20 @@ | ||
use raw::{Env, Local}; | ||
use crate::raw::{Env, Local}; | ||
use std::os::raw::c_void; | ||
use std::ptr::null_mut; | ||
|
||
use nodejs_sys as napi; | ||
use crate::napi::bindings as napi; | ||
|
||
pub unsafe extern "C" fn new(out: &mut Local, env: Env, size: u32) -> bool { | ||
let status = napi::napi_create_arraybuffer(env, size as usize, null_mut(), out as *mut _); | ||
let status = napi::create_arraybuffer(env, size as usize, null_mut(), out as *mut _); | ||
|
||
status == napi::napi_status::napi_ok | ||
status == napi::Status::Ok | ||
} | ||
|
||
pub unsafe extern "C" fn data<'a, 'b>(env: Env, base_out: &'a mut *mut c_void, obj: Local) -> usize { | ||
let mut size = 0; | ||
assert_eq!( | ||
napi::napi_get_arraybuffer_info(env, obj, base_out as *mut _, &mut size as *mut _), | ||
napi::napi_status::napi_ok, | ||
napi::get_arraybuffer_info(env, obj, base_out as *mut _, &mut size as *mut _), | ||
napi::Status::Ok, | ||
); | ||
size | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,204 @@ | ||
#[cfg(windows)] | ||
use libloading::os::windows::Library; | ||
#[cfg(not(windows))] | ||
use libloading::os::unix::Library; | ||
|
||
use std::os::raw::{c_char, c_void}; | ||
use super::types::*; | ||
|
||
generate!(extern "C" { | ||
fn get_undefined(env: Env, result: *mut Value) -> Status; | ||
|
||
fn get_null(env: Env, result: *mut Value) -> Status; | ||
|
||
fn get_global(env: Env, result: *mut Value) -> Status; | ||
|
||
fn get_boolean(env: Env, value: bool, result: *mut Value) -> Status; | ||
|
||
fn create_double(env: Env, value: f64, result: *mut Value) -> Status; | ||
|
||
fn create_object(env: Env, result: *mut Value) -> Status; | ||
|
||
fn get_value_bool(env: Env, value: Value, result: *mut bool) -> Status; | ||
|
||
fn get_value_double(env: Env, value: Value, result: *mut f64) -> Status; | ||
|
||
fn create_array_with_length(env: Env, length: usize, result: *mut Value) -> Status; | ||
|
||
fn get_array_length(env: Env, value: Value, result: *mut u32)-> Status; | ||
|
||
fn get_new_target(env: Env, cbinfo: CallbackInfo, result: *mut Value) -> Status; | ||
|
||
fn coerce_to_object(env: Env, value: Value, result: *mut Value) -> Status; | ||
|
||
fn coerce_to_string(env: Env, value: Value, result: *mut Value) -> Status; | ||
|
||
fn throw(env: Env, error: Value) -> Status; | ||
|
||
fn create_error(env: Env, code: Value, msg: Value, result: *mut Value) -> Status; | ||
|
||
fn get_and_clear_last_exception(env: Env, result: *mut Value) -> Status; | ||
|
||
fn is_exception_pending(env: Env, result: *mut bool) -> Status; | ||
|
||
fn get_value_external(env: Env, value: Value, result: *mut *mut c_void) -> Status; | ||
|
||
fn typeof_value(env: Env, value: Value, result: *mut ValueType) -> Status; | ||
|
||
fn close_escapable_handle_scope(env: Env, scope: EscapableHandleScope) -> Status; | ||
|
||
fn open_escapable_handle_scope(env: Env, result: *mut EscapableHandleScope) -> Status; | ||
|
||
fn open_handle_scope(env: Env, result: *mut HandleScope) -> Status; | ||
|
||
fn close_handle_scope(env: Env, scope: HandleScope) -> Status; | ||
|
||
fn is_arraybuffer(env: Env, value: Value, result: *mut bool) -> Status; | ||
fn is_buffer(env: Env, value: Value, result: *mut bool) -> Status; | ||
fn is_error(env: Env, value: Value, result: *mut bool) -> Status; | ||
fn is_array(env: Env, value: Value, result: *mut bool) -> Status; | ||
|
||
fn get_value_string_utf8( | ||
env: Env, | ||
value: Value, | ||
buf: *mut c_char, | ||
bufsize: usize, | ||
result: *mut usize, | ||
) -> Status; | ||
|
||
fn create_type_error( | ||
env: Env, | ||
code: Value, | ||
msg: Value, | ||
result: *mut Value, | ||
) -> Status; | ||
|
||
fn create_range_error( | ||
env: Env, | ||
code: Value, | ||
msg: Value, | ||
result: *mut Value, | ||
) -> Status; | ||
|
||
fn create_string_utf8( | ||
env: Env, | ||
str: *const c_char, | ||
length: usize, | ||
result: *mut Value, | ||
) -> Status; | ||
|
||
fn create_arraybuffer( | ||
env: Env, | ||
byte_length: usize, | ||
data: *mut *mut c_void, | ||
result: *mut Value, | ||
) -> Status; | ||
|
||
fn get_arraybuffer_info( | ||
env: Env, | ||
arraybuffer: Value, | ||
data: *mut *mut c_void, | ||
byte_length: *mut usize, | ||
) -> Status; | ||
|
||
fn create_buffer( | ||
env: Env, | ||
length: usize, | ||
data: *mut *mut c_void, | ||
result: *mut Value, | ||
) -> Status; | ||
|
||
fn get_buffer_info( | ||
env: Env, | ||
value: Value, | ||
data: *mut *mut c_void, | ||
length: *mut usize, | ||
) -> Status; | ||
|
||
fn get_cb_info( | ||
env: Env, | ||
cbinfo: CallbackInfo, | ||
argc: *mut usize, | ||
argv: *mut Value, | ||
this_arg: *mut Value, | ||
data: *mut *mut c_void, | ||
) -> Status; | ||
|
||
fn create_external( | ||
env: Env, | ||
data: *mut c_void, | ||
finalize_cb: Finalize, | ||
finalize_hint: *mut c_void, | ||
result: *mut Value, | ||
) -> Status; | ||
|
||
fn new_instance( | ||
env: Env, | ||
constructor: Value, | ||
argc: usize, | ||
argv: *const Value, | ||
result: *mut Value, | ||
) -> Status; | ||
|
||
fn call_function( | ||
env: Env, | ||
recv: Value, | ||
func: Value, | ||
argc: usize, | ||
argv: *const Value, | ||
result: *mut Value, | ||
) -> Status; | ||
|
||
fn create_function( | ||
env: Env, | ||
utf8name: *const c_char, | ||
length: usize, | ||
cb: Callback, | ||
data: *mut c_void, | ||
result: *mut Value, | ||
) -> Status; | ||
|
||
fn set_property( | ||
env: Env, | ||
object: Value, | ||
key: Value, | ||
value: Value, | ||
) -> Status; | ||
|
||
fn get_property( | ||
env: Env, | ||
object: Value, | ||
key: Value, | ||
result: *mut Value, | ||
) -> Status; | ||
|
||
fn set_element( | ||
env: Env, | ||
object: Value, | ||
index: u32, | ||
value: Value, | ||
) -> Status; | ||
|
||
fn get_element( | ||
env: Env, | ||
object: Value, | ||
index: u32, | ||
result: *mut Value, | ||
) -> Status; | ||
|
||
fn get_all_property_names( | ||
env: Env, | ||
object: Value, | ||
key_mode: KeyCollectionMode, | ||
key_filter: KeyFilter, | ||
key_conversion: KeyConversion, | ||
result: *mut Value, | ||
) -> Status; | ||
|
||
fn escape_handle( | ||
env: Env, | ||
scope: EscapableHandleScope, | ||
escapee: Value, | ||
result: *mut Value, | ||
) -> Status; | ||
}); |
Oops, something went wrong.