From bb5950cd76ee2d22744d1df31add20a1a2180152 Mon Sep 17 00:00:00 2001 From: CordlessCoder Date: Wed, 17 Sep 2025 01:23:25 +0100 Subject: [PATCH] Relax dynamic source requirement from Fn to FnMut --- src/channel.rs | 6 +++--- src/types.rs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/channel.rs b/src/channel.rs index 3ce9e7d..531c0bc 100644 --- a/src/channel.rs +++ b/src/channel.rs @@ -117,9 +117,9 @@ where } fn handle_get_value(&self) -> Result, Error> { - let state = self.state.lock().map_err(|_| Error::InternalError)?; + let mut state = self.state.lock().map_err(|_| Error::InternalError)?; - match &*state { + match &mut *state { ValueSource::Static(value) => Ok(Response::Value(value.clone())), ValueSource::Dynamic(closure) => { let value = self.execute_closure_safely(closure); @@ -135,7 +135,7 @@ where fn execute_closure_safely( &self, - closure: &dyn Fn() -> T, + closure: &mut dyn FnMut() -> T, ) -> Result> { std::panic::catch_unwind(std::panic::AssertUnwindSafe(closure)) } diff --git a/src/types.rs b/src/types.rs index 203a743..32eb625 100644 --- a/src/types.rs +++ b/src/types.rs @@ -16,7 +16,7 @@ pub enum Response { /// Represents the source of values: either static or dynamic pub(crate) enum ValueSource { Static(T), - Dynamic(Box T + Send + Sync + 'static>), + Dynamic(Box T + Send + Sync + 'static>), None, // Never set Cleared, // Was set but cleared (closed) }