Macro erlang_nif_sys::slice_args [] [src]

macro_rules! slice_args {
    ($f:expr) => { ... };
}

Wrapper to deliver NIF args as Rust slice.

A macro wrapper that combines the argc and args parameters into a more Rustic slice (&[ERL_NIF_TERM]). On release builds this macro incurs zero overhead.

Examples

#[macro_use]
extern crate erlang_nif_sys;
use erlang_nif_sys::*;
use std::mem;

nif_init!("mymod", [
    ("native_add", 2, slice_args!(native_add))
]);

fn native_add(env: *mut ErlNifEnv,
              args: &[ERL_NIF_TERM]) -> ERL_NIF_TERM {
    unsafe {
        let mut a: c_int = mem::uninitialized();
        let mut b: c_int = mem::uninitialized();
        if args.len() == 2 &&
           0 != enif_get_int(env, args[0], &mut a) &&
           0 != enif_get_int(env, args[1], &mut b) {
            enif_make_int(env, a+b)
        }
        else {
           enif_make_badarg(env)
        }
    }
}