From e28e5ceb1e8a94b158358b10a5d5fbd6f2d91f26 Mon Sep 17 00:00:00 2001 From: Greg Johnston Date: Sun, 16 Jun 2024 13:35:45 -0400 Subject: [PATCH] catch resource reads inside Signal during Suspense --- tachys/src/reactive_graph/mod.rs | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/tachys/src/reactive_graph/mod.rs b/tachys/src/reactive_graph/mod.rs index 98fe3506d..ec303cae8 100644 --- a/tachys/src/reactive_graph/mod.rs +++ b/tachys/src/reactive_graph/mod.rs @@ -419,7 +419,7 @@ mod stable { }; macro_rules! signal_impl { - ($sig:ident) => { + ($sig:ident $dry_resolve:literal) => { impl Render for $sig where V: Render + Clone + Send + Sync + 'static, @@ -473,7 +473,11 @@ mod stable { const MIN_LENGTH: usize = 0; - fn dry_resolve(&mut self) {} + fn dry_resolve(&mut self) { + if $dry_resolve { + _ = self.get(); + } + } async fn resolve(self) -> Self::AsyncOutput { self @@ -570,7 +574,7 @@ mod stable { } macro_rules! signal_impl_unsend { - ($sig:ident) => { + ($sig:ident $dry_resolve:literal) => { impl Render for $sig where V: Render + Send + Sync + Clone + 'static, @@ -624,7 +628,11 @@ mod stable { const MIN_LENGTH: usize = 0; - fn dry_resolve(&mut self) {} + fn dry_resolve(&mut self) { + if $dry_resolve { + _ = self.get(); + } + } async fn resolve(self) -> Self::AsyncOutput { self @@ -720,14 +728,14 @@ mod stable { }; } - signal_impl!(RwSignal); - signal_impl!(ReadSignal); - signal_impl!(Memo); - signal_impl!(Signal); - signal_impl_unsend!(ArcRwSignal); - signal_impl_unsend!(ArcReadSignal); - signal_impl!(ArcMemo); - signal_impl!(ArcSignal); + signal_impl!(RwSignal false); + signal_impl!(ReadSignal false); + signal_impl!(Memo true); + signal_impl!(Signal true); + signal_impl_unsend!(ArcRwSignal false); + signal_impl_unsend!(ArcReadSignal false); + signal_impl!(ArcMemo false); + signal_impl!(ArcSignal true); } /*