erl_nif 0.5.0

Write Erlang and Elixir NIFs in Rust.
Documentation
use crate::{
	sys::{enif_raise_exception, ErlNifEnv, ERL_NIF_TERM},
	IntoErlNif,
};
use std::marker::PhantomData;

#[derive(Clone, Copy)]
pub struct Env<'a>(*mut ErlNifEnv, PhantomData<&'a ErlNifEnv>);

impl<'a> Env<'a> {
	pub fn from_raw(env: *mut ErlNifEnv) -> Env<'a> {
		Env(env, PhantomData)
	}

	pub fn raw(&self) -> *mut ErlNifEnv {
		self.0
	}

	pub fn raise_exception(&self, message: &str) -> ERL_NIF_TERM {
		let message = message
			.into_erl_nif(*self)
			.expect("failed to create exception message");
		unsafe { enif_raise_exception(self.raw(), message.raw()) }
	}
}