From cbb91d694face57f4b4dde2747c610fc30fd0f55 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Mon, 7 Apr 2025 18:36:16 -0500 Subject: [PATCH] Fix component macro with where clause (#3951) --- packages/core-macro/src/component.rs | 3 ++- packages/core-macro/tests/generics.rs | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/core-macro/src/component.rs b/packages/core-macro/src/component.rs index e8d8589f2..46410a0cd 100644 --- a/packages/core-macro/src/component.rs +++ b/packages/core-macro/src/component.rs @@ -225,13 +225,14 @@ impl ComponentBody { .. } = sig; + let where_clause = &generics.where_clause; let struct_fields = inputs.iter().map(move |f| make_prop_struct_field(f, vis)); let struct_ident = Ident::new(&format!("{ident}Props"), ident.span()); parse_quote! { #[derive(Props, Clone, PartialEq)] #[allow(non_camel_case_types)] - #vis struct #struct_ident #generics { + #vis struct #struct_ident #generics #where_clause { #(#struct_fields),* } } diff --git a/packages/core-macro/tests/generics.rs b/packages/core-macro/tests/generics.rs index c846ba8e0..2547ab924 100644 --- a/packages/core-macro/tests/generics.rs +++ b/packages/core-macro/tests/generics.rs @@ -1,3 +1,5 @@ +use std::fmt::Display; + use dioxus::prelude::*; // This test just checks that props compile with generics @@ -17,6 +19,9 @@ fn generic_props_compile() { TakesCloneManualWhere { value: "hello world" } + GenericFnWhereClause { + value: "hello world" + } } } @@ -61,4 +66,14 @@ fn generic_props_compile() { ) -> Element { rsx! {} } + + #[component] + fn GenericFnWhereClause(value: T) -> Element + where + T: Clone + PartialEq + Display + 'static, + { + rsx! { + p { "{value}" } + } + } }