From 8101d06671b018b86e63a26fd9e16188223e5afb Mon Sep 17 00:00:00 2001 From: Benedikt Reinartz Date: Mon, 6 Jan 2025 10:12:27 +0100 Subject: [PATCH 1/2] Fix Nif* macros requiring an encoder --- rustler_codegen/src/ex_struct.rs | 1 - rustler_codegen/src/map.rs | 1 - .../native/rustler_test/src/test_codegen.rs | 33 +++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) 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..32f5669c 100644 --- a/rustler_tests/native/rustler_test/src/test_codegen.rs +++ b/rustler_tests/native/rustler_test/src/test_codegen.rs @@ -225,6 +225,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}; From cba7e4ac678f8c85e4ca8a9e07a3e90e7d3dfc24 Mon Sep 17 00:00:00 2001 From: Benedikt Reinartz Date: Mon, 6 Jan 2025 21:43:50 +0100 Subject: [PATCH 2/2] Add note and changelog entry --- CHANGELOG.md | 6 ++++++ rustler_tests/native/rustler_test/src/test_codegen.rs | 1 + 2 files changed, 7 insertions(+) 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_tests/native/rustler_test/src/test_codegen.rs b/rustler_tests/native/rustler_test/src/test_codegen.rs index 32f5669c..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 {