From 47ce1afb943c18c45c1736b5a3663afe433f65c3 Mon Sep 17 00:00:00 2001 From: Benedikt Reinartz Date: Mon, 6 Jan 2025 21:51:18 +0100 Subject: [PATCH] Fix Nif* macros requiring an encoder (#676) * Fix Nif* macros requiring an encoder * Add note and changelog entry --- CHANGELOG.md | 6 ++++ rustler_codegen/src/ex_struct.rs | 1 - rustler_codegen/src/map.rs | 1 - .../native/rustler_test/src/test_codegen.rs | 34 +++++++++++++++++++ 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6df509eb..2b762401 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 See [`UPGRADE.md`](./UPGRADE.md) for additional help when upgrading to newer versions. +## unreleased + +### Fixed + +- Some derive macros failed when only `decode` was requested (#676) + ## [0.35.1] - 2024-12-18 ### Fixed diff --git a/rustler_codegen/src/ex_struct.rs b/rustler_codegen/src/ex_struct.rs index e051c494..71cff834 100644 --- a/rustler_codegen/src/ex_struct.rs +++ b/rustler_codegen/src/ex_struct.rs @@ -59,7 +59,6 @@ pub fn transcoder_decorator(ast: &syn::DeriveInput, add_exception: bool) -> Toke #decoder - #[allow(clippy::needless_borrow)] #encoder }; diff --git a/rustler_codegen/src/map.rs b/rustler_codegen/src/map.rs index 5cc9e0d3..51c4ef13 100644 --- a/rustler_codegen/src/map.rs +++ b/rustler_codegen/src/map.rs @@ -44,7 +44,6 @@ pub fn transcoder_decorator(ast: &syn::DeriveInput) -> TokenStream { #decoder - #[allow(clippy::needless_borrow)] #encoder }; diff --git a/rustler_tests/native/rustler_test/src/test_codegen.rs b/rustler_tests/native/rustler_test/src/test_codegen.rs index 5cff1484..3abcbf05 100644 --- a/rustler_tests/native/rustler_test/src/test_codegen.rs +++ b/rustler_tests/native/rustler_test/src/test_codegen.rs @@ -29,6 +29,7 @@ pub fn tuple_echo(tuple: AddTuple) -> AddTuple { #[derive(NifRecord)] #[rustler(encode, decode)] // Added to check encode/decode attribute, #180 +// The case of only `decode` is checked below #[must_use] // Added to check attribute order (see similar issue #152) #[tag = "record"] pub struct AddRecord { @@ -225,6 +226,39 @@ pub fn tuplestruct_record_echo(tuplestruct: TupleStructRecord) -> TupleStructRec tuplestruct } +mod check_if_only_decode_is_enough { + // Regression test, failed to compile + // TODO: Move this test to the trybuild tests in rustler_codegen + + use rustler::{NifMap, NifRecord, NifStruct, NifTaggedEnum, NifTuple, NifUnitEnum}; + + #[derive(NifMap)] + #[rustler(decode)] + struct TestMap {} + + #[derive(NifRecord)] + #[tag = "test_rec"] + #[rustler(decode)] + struct TestRec {} + + #[derive(NifTuple)] + #[rustler(decode)] + struct TestTuple {} + + #[derive(NifStruct)] + #[module = "TestStruct"] + #[rustler(decode)] + struct TestStruct {} + + #[derive(NifUnitEnum)] + #[rustler(decode)] + enum TestUnitEnum {} + + #[derive(NifTaggedEnum)] + #[rustler(decode)] + enum TestTaggedEnum {} +} + pub mod reserved_keywords { use rustler::{NifMap, NifRecord, NifStruct, NifTuple, NifUntaggedEnum};