rusterlium / rustler

Safe Rust bridge for creating Erlang NIF functions
https://docs.rs/crate/rustler
Apache License 2.0
4.24k stars 222 forks source link

Add support for path dependencies #607

Closed flupke closed 1 month ago

flupke commented 2 months ago

What changes

Fix a bug when adding a path dependency to a rustler Cargo.toml that gives this cryptic error:

  == Compilation error in file lib/multiplayer_backend/project_mutator.ex ==
  ** (Protocol.UndefinedError) protocol Enumerable not implemented for nil of type Atom
      (elixir 1.16.1) lib/enum.ex:1: Enumerable.impl_for!/1
      (elixir 1.16.1) lib/enum.ex:166: Enumerable.reduce/3
      (elixir 1.16.1) lib/enum.ex:4399: Enum.filter/2
      (rustler 0.32.1) lib/rustler/compiler/config.ex:130: Rustler.Compiler.Config.gather_local_crates/4
      (rustler 0.32.1) lib/rustler/compiler/config.ex:108: Rustler.Compiler.Config.external_resources/3
      (rustler 0.32.1) lib/rustler/compiler/config.ex:79: Rustler.Compiler.Config.build/1
      (rustler 0.32.1) lib/rustler/compiler.ex:8: Rustler.Compiler.compile_crate/3
      lib/multiplayer_backend/project_mutator.ex:2: (module)

Somehow this dependency slips nil's in the specs, so we just filter them out.

How to test

Clone this repository and try to build it to reproduce the error. Uncomment the rustler dependency pointing to this PR to fix.

filmor commented 1 month ago

I think this will do for now.