#![allow(clippy::missing_safety_doc)]
#![allow(clippy::upper_case_acronyms)]
#[cfg(windows)]
use unreachable::UncheckedOptionExt;
pub use std::os::raw::{c_char, c_double, c_int, c_long, c_uchar, c_uint, c_ulong, c_void};
use std::os;
#[allow(non_camel_case_types)]
pub type size_t = usize;
use std::option::Option;
#[allow(non_camel_case_types)]
pub type ERL_NIF_UINT = size_t;
#[allow(non_camel_case_types)]
pub type ERL_NIF_TERM = ERL_NIF_UINT;
#[derive(Debug)]
#[allow(missing_copy_implementations)]
#[repr(C)]
pub struct ErlNifEnv {
dummy: *mut c_void, }
unsafe impl Send for ErlNifEnv {}
#[repr(C)]
pub struct ErlNifFunc {
pub name: *const u8,
pub arity: c_uint,
pub function: unsafe extern "C" fn(
env: *mut ErlNifEnv,
argc: c_int,
argv: *const ERL_NIF_TERM,
) -> ERL_NIF_TERM,
pub flags: c_uint,
}
#[doc(hidden)]
#[derive(Debug)]
#[repr(C)]
#[allow(non_snake_case)]
pub struct ErlNifEntry {
pub major: c_int,
pub minor: c_int,
pub name: *const u8,
pub num_of_funcs: c_int,
pub funcs: *const ErlNifFunc,
pub load: Option<
unsafe extern "C" fn(
env: *mut ErlNifEnv,
priv_data: *mut *mut c_void,
load_info: ERL_NIF_TERM,
) -> c_int,
>,
pub reload: Option<
unsafe extern "C" fn(
env: *mut ErlNifEnv,
priv_data: *mut *mut c_void,
load_info: ERL_NIF_TERM,
) -> c_int,
>,
pub upgrade: Option<
unsafe extern "C" fn(
env: *mut ErlNifEnv,
priv_data: *mut *mut c_void,
old_priv_data: *mut *mut c_void,
load_info: ERL_NIF_TERM,
) -> c_int,
>,
pub unload: Option<unsafe extern "C" fn(env: *mut ErlNifEnv, priv_data: *mut c_void) -> ()>,
pub vm_variant: *const u8,
pub options: c_uint, pub sizeof_ErlNifResourceTypeInit: usize, }
pub const ERL_NIF_DIRTY_NIF_OPTION: c_uint = 1;
#[allow(missing_copy_implementations)]
#[derive(Debug, Copy, Clone)]
#[repr(C)]
pub struct ErlNifBinary {
pub size: size_t,
pub data: *mut u8,
ref_bin: *mut c_void,
_spare: [*mut c_void; 2],
}
#[cfg(windows)]
pub type ErlNifEvent = os::windows::raw::HANDLE;
#[cfg(unix)]
pub type ErlNifEvent = os::unix::io::RawFd;
#[allow(missing_copy_implementations)]
#[repr(C)]
pub struct ErlNifResourceType {
dummy: c_int,
}
#[allow(missing_copy_implementations)]
pub type ErlNifResourceDtor = unsafe extern "C" fn(env: *mut ErlNifEnv, obj: *mut c_void) -> ();
#[allow(missing_copy_implementations)]
pub type ErlNifResourceStop = unsafe extern "C" fn(
env: *mut ErlNifEnv,
obj: *mut c_void,
event: ErlNifEvent,
is_direct_call: c_int,
) -> ();
#[allow(missing_copy_implementations)]
pub type ErlNifResourceDown = unsafe extern "C" fn(
env: *mut ErlNifEnv,
obj: *mut c_void,
pid: *const ErlNifPid,
mon: *const ErlNifMonitor,
) -> ();
pub type ErlNifResourceDynCall =
unsafe extern "C" fn(env: *mut ErlNifEnv, obj: *mut c_void, call_data: *const c_void) -> ();
#[derive(Debug, Copy, Clone)]
#[repr(C)]
pub struct ErlNifResourceTypeInit {
dtor: *const ErlNifResourceDtor,
stop: *const ErlNifResourceStop, down: *const ErlNifResourceDown, members: c_int,
dyncall: *const ErlNifResourceDynCall,
}
pub type ErlNifSelectFlags = c_int;
#[allow(clippy::identity_op)]
pub const ERL_NIF_SELECT_READ: ErlNifSelectFlags = 1 << 0;
pub const ERL_NIF_SELECT_WRITE: ErlNifSelectFlags = 1 << 1;
pub const ERL_NIF_SELECT_STOP: ErlNifSelectFlags = 1 << 2;
pub const ERL_NIF_SELECT_FAILED: ErlNifSelectFlags = 1 << 3;
pub const ERL_NIF_SELECT_READ_CANCELLED: ErlNifSelectFlags = 1 << 4;
pub const ERL_NIF_SELECT_WRITE_CANCELLED: ErlNifSelectFlags = 1 << 5;
pub const ERL_NIF_SELECT_ERROR_CANCELLED: ErlNifSelectFlags = 1 << 6;
pub const ERL_NIF_SELECT_NOTSUP: ErlNifSelectFlags = 1 << 7;
#[derive(Debug, Copy, Clone)]
#[repr(C)]
pub struct ErlNifMonitor {
data: [usize; 4],
}
#[derive(Debug, Copy, Clone)]
#[repr(C)]
pub enum ErlNifResourceFlags {
ERL_NIF_RT_CREATE = 1,
ERL_NIF_RT_TAKEOVER = 2,
}
#[derive(Debug, Copy, Clone)]
#[repr(C)]
pub enum ErlNifCharEncoding {
ERL_NIF_LATIN1 = 1,
}
#[derive(Debug, Copy, Clone)]
#[repr(C)]
pub struct ErlNifPid {
pid: ERL_NIF_TERM,
}
pub unsafe fn enif_make_pid(_env: *mut ErlNifEnv, pid: ErlNifPid) -> ERL_NIF_TERM {
pid.pid
}
#[allow(missing_copy_implementations)]
#[repr(C)]
pub struct ErlNifSysInfo {
pub driver_major_version: c_int,
pub driver_minor_version: c_int,
pub erts_version: *mut c_char,
pub otp_release: *mut c_char,
pub thread_support: c_int,
pub smp_support: c_int,
pub async_threads: c_int,
pub scheduler_threads: c_int,
pub nif_major_version: c_int,
pub nif_minor_version: c_int,
pub dirty_scheduler_support: c_int,
}
pub type ErlNifDirtyTaskFlags = c_uint;
pub const ERL_NIF_DIRTY_JOB_CPU_BOUND: ErlNifDirtyTaskFlags = 1;
pub const ERL_NIF_DIRTY_JOB_IO_BOUND: ErlNifDirtyTaskFlags = 2;
#[allow(missing_copy_implementations)]
#[repr(C)]
pub struct ErlNifMapIterator {
map: ERL_NIF_TERM,
t_limit: ERL_NIF_UINT,
idx: ERL_NIF_UINT,
ks: *mut ERL_NIF_TERM,
vs: *mut ERL_NIF_TERM,
__spare__: [*mut c_void; 2],
}
#[derive(Copy, Clone)]
#[repr(C)]
pub enum ErlNifMapIteratorEntry {
ERL_NIF_MAP_ITERATOR_HEAD = 1,
ERL_NIF_MAP_ITERATOR_TAIL = 2,
}
pub type ErlNifTime = i64;
pub const ERL_NIF_TIME_ERROR: i64 = -9_223_372_036_854_775_808;
#[derive(Copy, Clone)]
#[repr(C)]
pub enum ErlNifTimeUnit {
ERL_NIF_SEC = 0,
ERL_NIF_MSEC = 1,
ERL_NIF_USEC = 2,
ERL_NIF_NSEC = 3,
}
pub type ErlNifUniqueInteger = c_int;
#[allow(clippy::identity_op)]
pub const ERL_NIF_UNIQUE_POSITIVE: ErlNifUniqueInteger = 1 << 0;
#[allow(clippy::identity_op)]
pub const ERL_NIF_UNIQUE_MONOTONIC: ErlNifUniqueInteger = 1 << 1;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct ErlNifPort {
port_id: ERL_NIF_TERM, }
pub type ErlNifBinaryToTerm = c_int;
pub const ERL_NIF_BIN2TERM_SAFE: ErlNifBinaryToTerm = 0x2000_0000;
pub const ERL_NIF_THR_UNDEFINED: c_int = 0;
pub const ERL_NIF_THR_NORMAL_SCHEDULER: c_int = 1;
pub const ERL_NIF_THR_DIRTY_CPU_SCHEDULER: c_int = 2;
pub const ERL_NIF_THR_DIRTY_IO_SCHEDULER: c_int = 3;
#[derive(Copy, Clone)]
#[repr(C)]
pub enum ErlNifHash {
ERL_NIF_INTERNAL_HASH = 1,
ERL_NIF_PHASH2 = 2,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub enum ErlNifTermType {
ERL_NIF_TERM_TYPE_ATOM = 1,
ERL_NIF_TERM_TYPE_BITSTRING = 2,
ERL_NIF_TERM_TYPE_FLOAT = 3,
ERL_NIF_TERM_TYPE_FUN = 4,
ERL_NIF_TERM_TYPE_INTEGER = 5,
ERL_NIF_TERM_TYPE_LIST = 6,
ERL_NIF_TERM_TYPE_MAP = 7,
ERL_NIF_TERM_TYPE_PID = 8,
ERL_NIF_TERM_TYPE_PORT = 9,
ERL_NIF_TERM_TYPE_REFERENCE = 10,
ERL_NIF_TERM_TYPE_TUPLE = 11,
ERL_NIF_TERM_TYPE__MISSING_DEFAULT_CASE__READ_THE_MANUAL = -1,
}
include!(concat!(env!("OUT_DIR"), "/nif_api.snippet"));