Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
Added
- Simple
Debugimpl forrustler::Error - Support newtype and tuple structs for
NifTupleandNifRecord rustler::Error::Termencoding an arbitrary boxed encoder, returning{:error, term}
Fixed
- Compilation time of generated decoders has been reduced significantly.
- Fixed a segfault caused by
OwnedEnv::send_and_clear
Changes
- Renamed
PidtoLocalPidto clarify that it can't point to a remote process - Dependencies have been updated.
- Derive macros have been refactored.
- Macros have been renamed and old ones have been deprecated:
rustler_export_nifs!is nowrustler::init!rustler_atoms!is nowrustler::atoms!resource_struct_init!is nowrustler::resource!
- New
rustler::atoms!macro removed theatomprefix from the name:
//
// Before
//
rustler::rustler_atoms! {
atom ok;
atom error;
}
//
// After
//
rustler::atoms! {
ok,
error,
}- NIF functions can be initialized with a simplified syntax:
//
// Before
//
rustler::rustler_export_nifs! {
"Elixir.Math",
[
("add", 2, add)
],
None
}
//
// After
//
rustler::init!("Elixir.Math", [add]);- NIFs can be derived from regular functions, if the arguments implement
Decoderand the return type implementsEncoder:
//
// Before
//
fn add<'a>(env: Env<'a>, args: &[Term<'a>]) -> Result<Term<'a>, Error> {
let num1: i64 = args[0].decode()?;
let num2: i64 = args[1].decode()?;
Ok((atoms::ok(), num1 + num2).encode(env))
}
//
// After
//
#[rustler::nif]
fn add(a: i64, b: i64) -> i64 {
a + b
}rustler::nifexposes more options to configure a NIF were the NIF is defined:
#[rustler::nif(schedule = "DirtyCpu")]
pub fn dirty_cpu() -> Atom {
let duration = Duration::from_millis(100);
std::thread::sleep(duration);
atoms::ok()
}
#[rustler::nif(name = "my_add")]
fn add(a: i64, b: i64) -> i64 {
a + b
}[0.21.0] - 2019-09-07
Added
- Support for OTP22.
- Rust linting with clippy.
- Support for decoding IOLists as binaries,
Term::decode_as_binary.
Changes
rustler_codegenis now reexported by therustlercrate. Depending on therustler_codegencrate is deprecated.erlang_nif-syshas been renamed torustler_sysand vendored into the rustler repo.- Replaced the hand-rolled TOML parser in
rustler_mixwith thetoml-elixirpackage. - Improve error messages for derived encoders/decoders.
- Rust
boolnow corresponds only to booleans (false,true) in Elixir. Previously,nilandfalsewere both decodable tobool. To use the previous behaviour, aTruthynewtype was introduced.