Skip to content

Commit

Permalink
Fix generic types for untagged enum codegen
Browse files Browse the repository at this point in the history
  • Loading branch information
evnu committed Aug 2, 2021
1 parent c882c95 commit 28e0f90
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 1 deletion.
2 changes: 1 addition & 1 deletion rustler_codegen/src/untagged_enum.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ fn gen_decoder(ctx: &Context, variants: &[&Variant]) -> TokenStream {
let field_type = &variant.fields.iter().next().unwrap().ty;

quote! {
if let Ok(inner) = #field_type::decode(term) {
if let Ok(inner) = <#field_type>::decode(term) {
return Ok( #enum_name :: #variant_name ( inner ) )
}
}
Expand Down
1 change: 1 addition & 0 deletions rustler_tests/lib/rustler_test.ex
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ defmodule RustlerTest do
def unit_enum_echo(_), do: err()
def untagged_enum_echo(_), do: err()
def untagged_enum_with_truthy(_), do: err()
def untagged_enum_for_issue_370(_), do: err()
def newtype_echo(_), do: err()
def tuplestruct_echo(_), do: err()
def newtype_record_echo(_), do: err()
Expand Down
1 change: 1 addition & 0 deletions rustler_tests/native/rustler_test/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ rustler::init!(
test_codegen::unit_enum_echo,
test_codegen::untagged_enum_echo,
test_codegen::untagged_enum_with_truthy,
test_codegen::untagged_enum_for_issue_370,
test_codegen::newtype_echo,
test_codegen::tuplestruct_echo,
test_codegen::newtype_record_echo,
Expand Down
12 changes: 12 additions & 0 deletions rustler_tests/native/rustler_test/src/test_codegen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,18 @@ pub fn untagged_enum_with_truthy(untagged_enum: UntaggedEnumWithTruthy) -> Untag
untagged_enum
}

#[derive(NifUntaggedEnum)]
pub enum UntaggedEnumForIssue370 {
Vec(Vec<i64>),
}

#[rustler::nif]
pub fn untagged_enum_for_issue_370(
untagged_enum: UntaggedEnumForIssue370,
) -> UntaggedEnumForIssue370 {
untagged_enum
}

#[derive(NifTuple)]
pub struct Newtype(i64);

Expand Down
4 changes: 4 additions & 0 deletions rustler_tests/test/codegen_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,10 @@ defmodule RustlerTest.CodegenTest do
assert false == RustlerTest.untagged_enum_with_truthy(nil)
end

test "untagged enum for issue 370" do
assert [1, 2, 3] == RustlerTest.untagged_enum_for_issue_370([1, 2, 3])
end

test "newtype tuple" do
assert {1} == RustlerTest.newtype_echo({1})

Expand Down

0 comments on commit 28e0f90

Please sign in to comment.