All Versions
19
Latest Version
Avg Release Cycle
95 days
Latest Release
41 days ago

Changelog History
Page 1

  • v0.25.0 Changes

    April 11, 2022

    โž• Added

    • NewBinary now also available as rustler::NewBinary (thanks @ayrat555)
    • Term::map_from_pairs() to conveniently build a map from a list -of pairs (thanks @philss)
    • ๐ŸŽ CI now also tests against macos

    ๐Ÿ›  Fixed

    • Snake-case warening for auto-generated RUSTLER_{}_field_{} variables (renamed to rustler_{}_field_{})

    ๐Ÿ”„ Changed

    • ๐ŸŽ Abort compilation on macos if macos target configuration is missing
  • v0.24.0 Changes

    February 24, 2022

    โž• Added

    • A NewBinary type to create binaries in Rust without going through OwnedBinary. This can improve performance. Thanks @dlesl!
    • TermType derives Eq and PartialEq.

    โšก๏ธ Updated

    • rustler_mix: Bumped required toml dependency to 0.6
    • โฌ†๏ธ Bumped rustler_sys dependency to ~2.2.

    ๐Ÿ”„ Changed

    • โœ… Rustler supports the latest 3 versions of Elixir and OTP. Currently, those are Elixir => 1.11 and OTP >= 22.

    ๐Ÿ›  Fixed

    • Set library file extension based on the compile target, thanks @cocoa-xu!
    • ๐Ÿ˜Œ Relaxed Jason version requirement to ~> 1.0
    • ๐Ÿ“š Various typos in the documentation, thanks @kianmeng!
  • v0.23.0 Changes

    December 22, 2021

    โž• Added

    • ๐Ÿ‘ป NifException for using Elixir exception structs
    • Hashing for term
    • Hash and Equality for Binary and OwnedBinary

    ๐Ÿ”„ Changed

    • ๐Ÿ‘ Rustler changed its supported range of OTP and Elixir versions. We aim to support the three newest versions of OTP and Elixir.
    • The decoder for Range requires that :step equals 1. The :step field was introduced with Elixir v1.12 and cannot be represented with Rust's RangeInclusive.
    • NIF API bindings are generated using Rust
  • v0.22.2 Changes

    October 07, 2021

    ๐Ÿ›  Fixed

    • ๐Ÿ›  Fixed a regression introduced with #386: Rustler.Compiler.Config called into cargo when skip_compilation? was set, breaking setups where cargo is not installed. Fixed with #389, thanks @karolsluszniak
  • v0.22.1 Changes

    October 05, 2021

    ๐Ÿ›  Fixed

    • [Breaking change] codegen-generated decoders always raise an error instead of causing the calling NIF to return an atom in some cases
    • ๐Ÿ›  Fix codegen problem for untagged enums (#370)
    • ๐Ÿ›  Fix handling local dependencies with @external_resources (#381)
  • v0.22.0 Changes

    September 07, 2019

    โž• Added

    • Simple Debug impl for rustler::Error
    • ๐Ÿ‘Œ Support newtype and tuple structs for NifTuple and NifRecord
    • rustler::Error::Term encoding an arbitrary boxed encoder, returning {:error, term}
    • Generic encoder/decoder for HashMap<T, U>, where T: Decoder and U: Decoder

    ๐Ÿ›  Fixed

    • Compilation time of generated decoders has been reduced significantly.
    • Fixed a segfault caused by OwnedEnv::send_and_clear

    ๐Ÿ”„ Changes

    • ๐Ÿ“‡ Renamed Pid to LocalPid to 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 now rustler::init!
      • rustler_atoms! is now rustler::atoms!
      • resource_struct_init! is now rustler::resource!
    • ๐Ÿ†• New rustler::atoms! macro removed the atom prefix from the name:
    //
    // Before
    //
    rustler::rustler_atoms! {
        atom ok;
        atom error;
        atom renamed_atom = "Renamed";
    }
    
    //
    // After
    //
    rustler::atoms! {
        ok,
        error,
        renamed_atom = "Renamed",
    }
    
    • 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 Decoder and the return type implements Encoder:
    //
    // 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::nif exposes 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
    }
    

    ๐Ÿ—„ Deprecations

    ๐Ÿšš The rustler compiler has been deprecated and will be removed with v1.0. NIFs ๐Ÿ‘€ are no longer defined in mix.exs, but are configured with use Rustler. See ๐Ÿ“š the documentation for the Rustler module. To migrate to the new ๐Ÿ”ง configuration:

    • โฌ‡๏ธ Drop :rustler from the :compilers key in your mix.exs project/0 function
    • โฌ‡๏ธ Drop :rustler_crates from project/0 and move the configurations into the use Rustler of your NIF module or application config:
      # config/dev.exs
      config :my_app, MyApp.Native,
        mode: :debug
    

    ๐Ÿ“š For more information, see the documentation.

  • v0.22.0-rc.0

    March 02, 2020
  • v0.21.2

    June 18, 2020
  • v0.21.1

    June 06, 2020
  • v0.21.0 Changes

    September 07, 2019

    โž• Added

    • ๐Ÿ‘Œ Support for OTP22.
    • ๐Ÿ‘• Rust linting with clippy.
    • Support for decoding IOLists as binaries, Term::decode_as_binary.

    ๐Ÿ”„ Changes

    • rustler_codegen is now reexported by the rustler crate. Depending on the rustler_codegen crate is deprecated.
    • erlang_nif-sys has been renamed to rustler_sys and vendored into the rustler repo.
    • ๐Ÿ“ฆ Replaced the hand-rolled TOML parser in rustler_mix with the toml-elixir package.
    • ๐Ÿ‘Œ Improve error messages for derived encoders/decoders.
    • Rust bool now corresponds only to booleans (false, true) in Elixir. Previously, nil and false were both decodable to bool. To use the previous behaviour, a Truthy newtype was introduced.