From 0058c7226e72e653d9e22c0879403ff6df195ec6 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Tue, 22 Oct 2024 09:27:40 -0700 Subject: [PATCH] Add regression test for issue 2844 error[E0424]: expected value, found module `self` --> test_suite/tests/regression/issue2844.rs:13:19 | 5 | #[derive(Serialize, Deserialize)] | --------- this function has a `self` parameter, but a macro invocation can only access identifiers it receives from parameters ... 13 | declare_in_macro!("with"); | ^^^^^^ `self` value is a keyword only available in methods with a `self` parameter error[E0425]: cannot find value `__s` in this scope --> test_suite/tests/regression/issue2844.rs:13:19 | 13 | declare_in_macro!("with"); | ^^^^^^ not found in this scope error[E0425]: cannot find value `__deserializer` in this scope --> test_suite/tests/regression/issue2844.rs:13:19 | 13 | declare_in_macro!("with"); | ^^^^^^ not found in this scope --- test_suite/tests/regression/issue2844.rs | 31 ++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 test_suite/tests/regression/issue2844.rs diff --git a/test_suite/tests/regression/issue2844.rs b/test_suite/tests/regression/issue2844.rs new file mode 100644 index 00000000..492718c8 --- /dev/null +++ b/test_suite/tests/regression/issue2844.rs @@ -0,0 +1,31 @@ +use serde_derive::{Deserialize, Serialize}; + +macro_rules! declare_in_macro { + ($with:literal) => { + #[derive(Serialize, Deserialize)] + pub struct S { + #[serde(with = $with)] + f: i32, + } + }; +} + +declare_in_macro!("with"); + +mod with { + use serde::{Deserializer, Serializer}; + + pub fn serialize(_: &i32, _: S) -> Result + where + S: Serializer, + { + unimplemented!() + } + + pub fn deserialize<'de, D>(_: D) -> Result + where + D: Deserializer<'de>, + { + unimplemented!() + } +}