From fab8a28081da10b337b18fcaca98fe64eca7fec7 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Sat, 16 May 2026 16:28:32 +0800 Subject: Require owned type for first parameter and reference for resources --- mingling_macros/src/chain.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'mingling_macros/src/chain.rs') diff --git a/mingling_macros/src/chain.rs b/mingling_macros/src/chain.rs index 9d3a901..8670f97 100644 --- a/mingling_macros/src/chain.rs +++ b/mingling_macros/src/chain.rs @@ -23,13 +23,19 @@ fn extract_args_info(sig: &Signature) -> syn::Result<(Pat, TypePath, Vec { let param_pat = (**pat).clone(); match &**ty { Type::Path(type_path) => (param_pat, type_path.clone()), + Type::Reference(_) => { + return Err(syn::Error::new( + ty.span(), + "The first parameter (previous type) must be taken by move, not by reference. Use `prev: SomeEntry` instead of `prev: &SomeEntry`.", + )); + } _ => { return Err(syn::Error::new( ty.span(), @@ -79,7 +85,12 @@ fn extract_args_info(sig: &Signature) -> syn::Result<(Pat, TypePath, Vec (type_path.clone(), false, false), + Type::Path(_) => { + return Err(syn::Error::new( + ty.span(), + "Resource injection parameter must be a reference (`&T` or `&mut T`), not an owned value. Use `age: &Age` instead of `age: Age`.", + )); + } _ => { return Err(syn::Error::new( ty.span(), -- cgit