From b5e22ad328e3f839bd7d15a834d5a06febd0b403 Mon Sep 17 00:00:00 2001 From: Filipe Rodrigues Date: Fri, 16 May 2025 17:52:29 +0100 Subject: [PATCH] Added `SignalReplace::replace_raw`. --- dynatos-reactive/src/signal.rs | 6 ++++++ dynatos-reactive/src/signal/ops/replace.rs | 3 +++ dynatos-reactive/src/with_default.rs | 10 ++++++++++ dynatos-router/src/query_array_signal.rs | 5 +++++ dynatos-router/src/query_signal.rs | 5 +++++ 5 files changed, 29 insertions(+) diff --git a/dynatos-reactive/src/signal.rs b/dynatos-reactive/src/signal.rs index af4b42f..6652753 100644 --- a/dynatos-reactive/src/signal.rs +++ b/dynatos-reactive/src/signal.rs @@ -130,9 +130,15 @@ impl SignalBorrow for Signal { impl SignalReplace for Signal { type Value = T; + #[track_caller] fn replace(&self, new_value: T) -> Self::Value { mem::replace(&mut self.borrow_mut(), new_value) } + + #[track_caller] + fn replace_raw(&self, new_value: T) -> Self::Value { + mem::replace(&mut self.borrow_mut_raw(), new_value) + } } /// Triggers on `Drop` diff --git a/dynatos-reactive/src/signal/ops/replace.rs b/dynatos-reactive/src/signal/ops/replace.rs index 5bbc1c0..8b86581 100644 --- a/dynatos-reactive/src/signal/ops/replace.rs +++ b/dynatos-reactive/src/signal/ops/replace.rs @@ -6,4 +6,7 @@ pub trait SignalReplace { /// Replaces the signal value, returning the previous value fn replace(&self, new_value: T) -> Self::Value; + + /// Replaces the signal value, returning the previous value without triggering any dependencies. + fn replace_raw(&self, new_value: T) -> Self::Value; } diff --git a/dynatos-reactive/src/with_default.rs b/dynatos-reactive/src/with_default.rs index 0098e96..fb21bbd 100644 --- a/dynatos-reactive/src/with_default.rs +++ b/dynatos-reactive/src/with_default.rs @@ -167,6 +167,11 @@ where fn replace(&self, new_value: T) -> Self::Value { self.inner.replace(Some(new_value)).unwrap_or(self.default) } + + #[track_caller] + fn replace_raw(&self, new_value: T) -> Self::Value { + self.inner.replace_raw(Some(new_value)).unwrap_or(self.default) + } } impl SignalReplace> for WithDefault @@ -180,6 +185,11 @@ where fn replace(&self, new_value: Option) -> Self::Value { self.inner.replace(new_value).unwrap_or(self.default) } + + #[track_caller] + fn replace_raw(&self, new_value: Option) -> Self::Value { + self.inner.replace_raw(new_value).unwrap_or(self.default) + } } /// Reference type for [`SignalBorrowMut`] impl diff --git a/dynatos-router/src/query_array_signal.rs b/dynatos-router/src/query_array_signal.rs index aef589d..95ef4af 100644 --- a/dynatos-router/src/query_array_signal.rs +++ b/dynatos-router/src/query_array_signal.rs @@ -119,6 +119,11 @@ where fn replace(&self, new_value: Vec) -> Self::Value { mem::replace(&mut self.borrow_mut(), new_value) } + + #[track_caller] + fn replace_raw(&self, new_value: Vec) -> Self::Value { + mem::replace(&mut self.borrow_mut_raw(), new_value) + } } /// Updates the location on `Drop` diff --git a/dynatos-router/src/query_signal.rs b/dynatos-router/src/query_signal.rs index 1775e7c..6cc2c5b 100644 --- a/dynatos-router/src/query_signal.rs +++ b/dynatos-router/src/query_signal.rs @@ -116,6 +116,11 @@ where fn replace(&self, new_value: Option) -> Self::Value { mem::replace(&mut self.borrow_mut(), new_value) } + + #[track_caller] + fn replace_raw(&self, new_value: Option) -> Self::Value { + mem::replace(&mut self.borrow_mut_raw(), new_value) + } } /// Updates the location on `Drop`