From f5b9cfce8dfff7fd5347a169591b8df9e5f9db11 Mon Sep 17 00:00:00 2001 From: Michael Meyer Date: Wed, 13 Mar 2024 18:53:35 +0100 Subject: [PATCH 1/2] Create failing test --- .../tests/hook_attr/hook-trait-item-pass.rs | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 packages/yew-macro/tests/hook_attr/hook-trait-item-pass.rs diff --git a/packages/yew-macro/tests/hook_attr/hook-trait-item-pass.rs b/packages/yew-macro/tests/hook_attr/hook-trait-item-pass.rs new file mode 100644 index 00000000000..7fc8ae6dcc8 --- /dev/null +++ b/packages/yew-macro/tests/hook_attr/hook-trait-item-pass.rs @@ -0,0 +1,22 @@ +use std::marker::PhantomData; + +pub struct QueryState { + p: PhantomData +} + +pub trait MyTrait { + type Associated; +} + + +#[yew::hook] +pub fn use_query_state( + selector: impl yew::html::IntoPropValue, +) -> QueryState +where + Props: MyTrait, +{ + QueryState:: { p: PhantomData:: } +} + +fn main() {} \ No newline at end of file From 75cdcc588a7a6a974bfd0a4f8592fd7d5b2dc89a Mon Sep 17 00:00:00 2001 From: Michael Meyer Date: Wed, 13 Mar 2024 19:49:33 +0100 Subject: [PATCH 2/2] Add generic types to boxed hooks --- packages/yew-macro/src/hook/mod.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/yew-macro/src/hook/mod.rs b/packages/yew-macro/src/hook/mod.rs index f22fd4f722e..a60ecbd551d 100644 --- a/packages/yew-macro/src/hook/mod.rs +++ b/packages/yew-macro/src/hook/mod.rs @@ -144,11 +144,13 @@ pub fn hook_impl(hook: HookFn) -> syn::Result { let as_boxed_fn = with_output.then(|| quote! { as #boxed_fn_type }); + let generic_types = generics.type_params().map(|t| &t.ident); + // We need boxing implementation for `impl Trait` arguments. quote! { let #boxed_inner_ident = ::std::boxed::Box::new( move |#ctx_ident: &mut ::yew::functional::HookContext| #inner_fn_rt { - #inner_fn_ident (#ctx_ident, #(#input_args,)*) + #inner_fn_ident :: <#(#generic_types,)*> (#ctx_ident, #(#input_args,)*) } ) #as_boxed_fn;