Derive Macro rustler::NifTaggedEnum

source ·
#[derive(NifTaggedEnum)]
{
    // Attributes available to this derive:
    #[rustler]
}
Expand description

Implementation of the NifTaggedEnum macro that lets the user annotate an enum that will generate elixir values when encoded. This can be used for any rust enums and will generate three types of values based on the kind of the enum. For example from the test code:

#[derive(NifTaggedEnum)]
enum TaggedEnum {
    Foo,
    Bar(String),
    Baz{ a: i32, b: i32 },
}

pub fn tagged_enum_echo<'a>(env: Env<'a>, args: &[Term<'a>]) -> NifResult<Term<'a>> {
    let tagged_enum: TaggedEnum = args[0].decode()?;
    Ok(tagged_enum.encode(env))
}

This can be used from elixir in the following manner.

test "tagged enum transcoder" do
  assert :foo == RustlerTest.tagged_enum_echo(:foo)
  assert {:bar, "Hello"} == RustlerTest.tagged_enum_echo(:bar, "Hello")
  assert {:baz, %{a: 33, b: 21}} == RustlerTest.tagged_enum_echo({:baz, %{a: 33, b: 21}})
end