Struct ArcMemo
pub struct ArcMemo<T, S = SyncStorage>where
S: Storage<T>,{
inner: Arc<MemoInner<T, S>>,
}
Expand description
An efficient derived reactive value based on other reactive values.
This is a reference-counted memo, which is Clone
but not Copy
.
For arena-allocated Copy
memos, use Memo
.
Unlike a โderived signal,โ a memo comes with two guarantees:
- The memo will only run once per change, no matter how many times you access its value.
- The memo will only notify its dependents if the value of the computation changes.
This makes a memo the perfect tool for expensive computations.
Memos have a certain overhead compared to derived signals. In most cases, you should create a derived signal. But if the derivation calculation is expensive, you should create a memo.
As with an Effect
, the argument to the memo function is the previous value,
i.e., the current value of the memo, which will be None
for the initial calculation.
ยงExamples
let (value, set_value) = signal(0);
// ๐ we could create a derived signal with a simple function
let double_value = move || value.get() * 2;
set_value.set(2);
assert_eq!(double_value(), 4);
// but imagine the computation is really expensive
let expensive = move || really_expensive_computation(value.get()); // lazy: doesn't run until called
// ๐ run #1: calls `really_expensive_computation` the first time
println!("expensive = {}", expensive());
// โ run #2: this calls `really_expensive_computation` a second time!
let some_value = expensive();
// instead, we create a memo
// ๐ run #1: the calculation runs once immediately
let memoized = ArcMemo::new(move |_| really_expensive_computation(value.get()));
// ๐ reads the current value of the memo
// can be `memoized()` on nightly
println!("memoized = {}", memoized.get());
// โ
reads the current value **without re-running the calculation**
let some_value = memoized.get();
ยงCore Trait Implementations
.get()
clones the current value of the memo. If you call it within an effect, it will cause that effect to subscribe to the memo, and to re-run whenever the value of the memo changes..get_untracked()
clones the value of the memo without reactively tracking it.
.read()
returns a guard that allows accessing the value of the memo by reference. If you call it within an effect, it will cause that effect to subscribe to the memo, and to re-run whenever the value of the memo changes..read_untracked()
gives access to the current value of the memo without reactively tracking it.
.with()
allows you to reactively access the memoโs value without cloning by applying a callback function..with_untracked()
allows you to access the memoโs value by applying a callback function without reactively tracking it.
.to_stream()
converts the memo to anasync
stream of values.::from_stream()
converts anasync
stream of values into a memo containing the latest value.
Fieldsยง
ยงinner: Arc<MemoInner<T, S>>
Implementationsยง
ยงimpl<T> ArcMemo<T>where
T: 'static,
SyncStorage: Storage<T>,
impl<T> ArcMemo<T>where
T: 'static,
SyncStorage: Storage<T>,
pub fn new(fun: impl Fn(Option<&T>) -> T + Send + Sync + 'static) -> ArcMemo<T>where
T: PartialEq,
pub fn new(fun: impl Fn(Option<&T>) -> T + Send + Sync + 'static) -> ArcMemo<T>where
T: PartialEq,
Creates a new memo by passing a function that computes the value.
This is lazy: the function will not be called until the memoโs value is read for the first time.
pub fn new_with_compare(
fun: impl Fn(Option<&T>) -> T + Send + Sync + 'static,
changed: fn(Option<&T>, Option<&T>) -> bool,
) -> ArcMemo<T>
pub fn new_with_compare( fun: impl Fn(Option<&T>) -> T + Send + Sync + 'static, changed: fn(Option<&T>, Option<&T>) -> bool, ) -> ArcMemo<T>
Creates a new memo by passing a function that computes the value, and a comparison function
that takes the previous value and the new value and returns true
if the value has
changed.
This is lazy: the function will not be called until the memoโs value is read for the first time.
pub fn new_owning(
fun: impl Fn(Option<T>) -> (T, bool) + Send + Sync + 'static,
) -> ArcMemo<T>
pub fn new_owning( fun: impl Fn(Option<T>) -> (T, bool) + Send + Sync + 'static, ) -> ArcMemo<T>
Creates a new memo by passing a function that computes the value.
Unlike ArcMemo::new
, this receives ownership of the previous value. As a result, it
must return both the new value and a bool
that is true
if the value has changed.
This is lazy: the function will not be called until the memoโs value is read for the first time.
Trait Implementationsยง
ยงimpl<T, S> DefinedAt for ArcMemo<T, S>where
S: Storage<T>,
impl<T, S> DefinedAt for ArcMemo<T, S>where
S: Storage<T>,
ยงfn defined_at(&self) -> Option<&'static Location<'static>>
fn defined_at(&self) -> Option<&'static Location<'static>>
None
in
release mode.ยงimpl<T> From<ArcMemo<T>> for MaybeSignal<T>
impl<T> From<ArcMemo<T>> for MaybeSignal<T>
ยงfn from(value: ArcMemo<T>) -> MaybeSignal<T>
fn from(value: ArcMemo<T>) -> MaybeSignal<T>
ยงimpl<T> From<ArcMemo<T, LocalStorage>> for Signal<T, LocalStorage>
impl<T> From<ArcMemo<T, LocalStorage>> for Signal<T, LocalStorage>
ยงfn from(value: ArcMemo<T, LocalStorage>) -> Signal<T, LocalStorage>
fn from(value: ArcMemo<T, LocalStorage>) -> Signal<T, LocalStorage>
ยงimpl<T> From<ArcReadSignal<T>> for ArcMemo<T>
impl<T> From<ArcReadSignal<T>> for ArcMemo<T>
ยงfn from(value: ArcReadSignal<T>) -> ArcMemo<T>
fn from(value: ArcReadSignal<T>) -> ArcMemo<T>
ยงimpl<T> From<ArcRwSignal<T>> for ArcMemo<T>
impl<T> From<ArcRwSignal<T>> for ArcMemo<T>
ยงfn from(value: ArcRwSignal<T>) -> ArcMemo<T>
fn from(value: ArcRwSignal<T>) -> ArcMemo<T>
ยงimpl<T> FromLocal<ArcMemo<T, LocalStorage>> for MaybeSignal<T, LocalStorage>
impl<T> FromLocal<ArcMemo<T, LocalStorage>> for MaybeSignal<T, LocalStorage>
ยงfn from_local(value: ArcMemo<T, LocalStorage>) -> MaybeSignal<T, LocalStorage>
fn from_local(value: ArcMemo<T, LocalStorage>) -> MaybeSignal<T, LocalStorage>
ยงimpl<T> FromLocal<ArcMemo<T, LocalStorage>> for Memo<T, LocalStorage>where
T: 'static,
impl<T> FromLocal<ArcMemo<T, LocalStorage>> for Memo<T, LocalStorage>where
T: 'static,
ยงfn from_local(value: ArcMemo<T, LocalStorage>) -> Memo<T, LocalStorage>
fn from_local(value: ArcMemo<T, LocalStorage>) -> Memo<T, LocalStorage>
ยงimpl<T, S> IsDisposed for ArcMemo<T, S>where
T: 'static,
S: Storage<T>,
impl<T, S> IsDisposed for ArcMemo<T, S>where
T: 'static,
S: Storage<T>,
ยงfn is_disposed(&self) -> bool
fn is_disposed(&self) -> bool
true
, the signal cannot be accessed without a panic.ยงimpl<T, S> ReactiveNode for ArcMemo<T, S>where
T: 'static,
S: Storage<T>,
impl<T, S> ReactiveNode for ArcMemo<T, S>where
T: 'static,
S: Storage<T>,
ยงfn mark_dirty(&self)
fn mark_dirty(&self)
ยงfn mark_check(&self)
fn mark_check(&self)
ยงfn mark_subscribers_check(&self)
fn mark_subscribers_check(&self)
ยงfn update_if_necessary(&self) -> bool
fn update_if_necessary(&self) -> bool
ยงimpl<T, S> ReadUntracked for ArcMemo<T, S>where
T: 'static,
S: Storage<T>,
impl<T, S> ReadUntracked for ArcMemo<T, S>where
T: 'static,
S: Storage<T>,
ยงtype Value = ReadGuard<T, Mapped<Plain<Option<<S as Storage<T>>::Wrapped>>, T>>
type Value = ReadGuard<T, Mapped<Plain<Option<<S as Storage<T>>::Wrapped>>, T>>
ยงfn try_read_untracked(&self) -> Option<<ArcMemo<T, S> as ReadUntracked>::Value>
fn try_read_untracked(&self) -> Option<<ArcMemo<T, S> as ReadUntracked>::Value>
None
if the signal has already been disposed.ยงfn read_untracked(&self) -> Self::Value
fn read_untracked(&self) -> Self::Value
ยงfn custom_try_read(&self) -> Option<Option<Self::Value>>
fn custom_try_read(&self) -> Option<Option<Self::Value>>
Read::try_read
implementation despite it being auto implemented. Read moreยงimpl<T, St> Serialize for ArcMemo<T, St>
impl<T, St> Serialize for ArcMemo<T, St>
ยงfn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
ยงimpl<T, S> Source for ArcMemo<T, S>where
T: 'static,
S: Storage<T>,
impl<T, S> Source for ArcMemo<T, S>where
T: 'static,
S: Storage<T>,
ยงfn add_subscriber(&self, subscriber: AnySubscriber)
fn add_subscriber(&self, subscriber: AnySubscriber)
ยงfn remove_subscriber(&self, subscriber: &AnySubscriber)
fn remove_subscriber(&self, subscriber: &AnySubscriber)
ยงfn clear_subscribers(&self)
fn clear_subscribers(&self)
ยงimpl<T, S> Subscriber for ArcMemo<T, S>where
T: 'static,
S: Storage<T>,
impl<T, S> Subscriber for ArcMemo<T, S>where
T: 'static,
S: Storage<T>,
ยงfn add_source(&self, source: AnySource)
fn add_source(&self, source: AnySource)
ยงfn clear_sources(&self, subscriber: &AnySubscriber)
fn clear_sources(&self, subscriber: &AnySubscriber)
ยงimpl<T, S> ToAnySource for ArcMemo<T, S>where
T: 'static,
S: Storage<T>,
impl<T, S> ToAnySource for ArcMemo<T, S>where
T: 'static,
S: Storage<T>,
ยงfn to_any_source(&self) -> AnySource
fn to_any_source(&self) -> AnySource
ยงimpl<T, S> ToAnySubscriber for ArcMemo<T, S>where
T: 'static,
S: Storage<T>,
impl<T, S> ToAnySubscriber for ArcMemo<T, S>where
T: 'static,
S: Storage<T>,
ยงfn to_any_subscriber(&self) -> AnySubscriber
fn to_any_subscriber(&self) -> AnySubscriber
impl<T, S> Eq for ArcMemo<T, S>where
S: Storage<T>,
Auto Trait Implementationsยง
impl<T, S> Freeze for ArcMemo<T, S>
impl<T, S = SyncStorage> !RefUnwindSafe for ArcMemo<T, S>
impl<T, S> Send for ArcMemo<T, S>
impl<T, S> Sync for ArcMemo<T, S>
impl<T, S> Unpin for ArcMemo<T, S>
impl<T, S = SyncStorage> !UnwindSafe for ArcMemo<T, S>
Blanket Implementationsยง
Sourceยงimpl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Sourceยงfn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
Sourceยงfn adapt_into(self) -> D
fn adapt_into(self) -> D
ยงimpl<F, V> AddAnyAttr for Fwhere
F: ReactiveFunction<Output = V>,
V: RenderHtml + 'static,
impl<F, V> AddAnyAttr for Fwhere
F: ReactiveFunction<Output = V>,
V: RenderHtml + 'static,
ยงtype Output<SomeNewAttr: Attribute> = Box<dyn FnMut() -> <V as AddAnyAttr>::Output<<SomeNewAttr as Attribute>::CloneableOwned> + Send>
type Output<SomeNewAttr: Attribute> = Box<dyn FnMut() -> <V as AddAnyAttr>::Output<<SomeNewAttr as Attribute>::CloneableOwned> + Send>
ยงfn add_any_attr<NewAttr>(
self,
attr: NewAttr,
) -> <F as AddAnyAttr>::Output<NewAttr>
fn add_any_attr<NewAttr>( self, attr: NewAttr, ) -> <F as AddAnyAttr>::Output<NewAttr>
ยงimpl<T> ArchivePointee for T
impl<T> ArchivePointee for T
ยงtype ArchivedMetadata = ()
type ArchivedMetadata = ()
ยงfn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Sourceยงimpl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Sourceยงfn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Sourceยงimpl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Sourceยงfn arrays_into(self) -> C
fn arrays_into(self) -> C
ยงimpl<F, V> AttributeValue for Fwhere
F: ReactiveFunction<Output = V>,
V: AttributeValue + 'static,
<V as AttributeValue>::State: 'static,
impl<F, V> AttributeValue for Fwhere
F: ReactiveFunction<Output = V>,
V: AttributeValue + 'static,
<V as AttributeValue>::State: 'static,
ยงtype AsyncOutput = <V as AttributeValue>::AsyncOutput
type AsyncOutput = <V as AttributeValue>::AsyncOutput
ยงtype State = RenderEffect<<V as AttributeValue>::State>
type State = RenderEffect<<V as AttributeValue>::State>
ยงtype Cloneable = Arc<Mutex<dyn FnMut() -> V + Send>>
type Cloneable = Arc<Mutex<dyn FnMut() -> V + Send>>
FnMut()
continues mutating the same
closure), but making a String
cloneable does not necessarily need to make it an
Arc<str>
, as two different clones of a String
will still have the same value.ยงtype CloneableOwned = Arc<Mutex<dyn FnMut() -> V + Send>>
type CloneableOwned = Arc<Mutex<dyn FnMut() -> V + Send>>
'static
. This is used for spreading across types when the
spreadable attribute needs to be owned. In some cases (&'a str
to Arc<str>
, etc.) the owned
cloneable type has worse performance than the cloneable type, so they are separate.ยงfn to_template(_key: &str, _buf: &mut String)
fn to_template(_key: &str, _buf: &mut String)
<template>
.ยงfn hydrate<const FROM_SERVER: bool>(
self,
key: &str,
el: &Element,
) -> <F as AttributeValue>::State
fn hydrate<const FROM_SERVER: bool>( self, key: &str, el: &Element, ) -> <F as AttributeValue>::State
<template>
.ยงfn build(self, el: &Element, key: &str) -> <F as AttributeValue>::State
fn build(self, el: &Element, key: &str) -> <F as AttributeValue>::State
ยงfn rebuild(self, key: &str, state: &mut <F as AttributeValue>::State)
fn rebuild(self, key: &str, state: &mut <F as AttributeValue>::State)
ยงfn into_cloneable(self) -> <F as AttributeValue>::Cloneable
fn into_cloneable(self) -> <F as AttributeValue>::Cloneable
ยงfn into_cloneable_owned(self) -> <F as AttributeValue>::CloneableOwned
fn into_cloneable_owned(self) -> <F as AttributeValue>::CloneableOwned
'static
.ยงfn dry_resolve(&mut self)
fn dry_resolve(&mut self)
ยงimpl<V, Key, Sig, T> BindAttribute<Key, Sig, T> for Vwhere
V: AddAnyAttr,
Key: AttributeKey,
Sig: IntoSplitSignal<Value = T>,
T: FromEventTarget + AttributeValue + PartialEq + Sync + 'static,
Signal<BoolOrT<T>>: IntoProperty,
<Sig as IntoSplitSignal>::Read: Get<Value = T> + Send + Sync + Clone + 'static,
<Sig as IntoSplitSignal>::Write: Send + Clone + 'static,
Element: GetValue<T>,
impl<V, Key, Sig, T> BindAttribute<Key, Sig, T> for Vwhere
V: AddAnyAttr,
Key: AttributeKey,
Sig: IntoSplitSignal<Value = T>,
T: FromEventTarget + AttributeValue + PartialEq + Sync + 'static,
Signal<BoolOrT<T>>: IntoProperty,
<Sig as IntoSplitSignal>::Read: Get<Value = T> + Send + Sync + Clone + 'static,
<Sig as IntoSplitSignal>::Write: Send + Clone + 'static,
Element: GetValue<T>,
ยงtype Output = <V as AddAnyAttr>::Output<Bind<Key, T, <Sig as IntoSplitSignal>::Read, <Sig as IntoSplitSignal>::Write>>
type Output = <V as AddAnyAttr>::Output<Bind<Key, T, <Sig as IntoSplitSignal>::Read, <Sig as IntoSplitSignal>::Write>>
ยงfn bind(
self,
key: Key,
signal: Sig,
) -> <V as BindAttribute<Key, Sig, T>>::Output
fn bind( self, key: Key, signal: Sig, ) -> <V as BindAttribute<Key, Sig, T>>::Output
Sourceยงimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Sourceยงfn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
ยงimpl<T> CallHasher for T
impl<T> CallHasher for T
Sourceยงimpl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Sourceยงtype Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters
when converting.Sourceยงfn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.ยงimpl<F, View> ChooseView for F
impl<F, View> ChooseView for F
Sourceยงimpl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
ยงimpl<Func, T> ComponentConstructor<(), T> for Funcwhere
Func: FnOnce() -> T,
impl<Func, T> ComponentConstructor<(), T> for Funcwhere
Func: FnOnce() -> T,
Sourceยงimpl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Sourceยงfn components_from(colors: C) -> T
fn components_from(colors: C) -> T
ยงimpl<T, K, V> CustomAttribute<K, V> for Twhere
T: AddAnyAttr,
K: CustomAttributeKey,
V: AttributeValue,
impl<T, K, V> CustomAttribute<K, V> for Twhere
T: AddAnyAttr,
K: CustomAttributeKey,
V: AttributeValue,
ยงimpl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
ยงfn deserialize(
&self,
deserializer: &mut D,
) -> Result<With<T, W>, <D as Fallible>::Error>
fn deserialize( &self, deserializer: &mut D, ) -> Result<With<T, W>, <D as Fallible>::Error>
ยงimpl<V, T, P, D> DirectiveAttribute<T, P, D> for Vwhere
V: AddAnyAttr,
D: IntoDirective<T, P>,
P: Clone + 'static,
T: 'static,
impl<V, T, P, D> DirectiveAttribute<T, P, D> for Vwhere
V: AddAnyAttr,
D: IntoDirective<T, P>,
P: Clone + 'static,
T: 'static,
ยงtype Output = <V as AddAnyAttr>::Output<Directive<T, D, P>>
type Output = <V as AddAnyAttr>::Output<Directive<T, D, P>>
ยงfn directive(
self,
handler: D,
param: P,
) -> <V as DirectiveAttribute<T, P, D>>::Output
fn directive( self, handler: D, param: P, ) -> <V as DirectiveAttribute<T, P, D>>::Output
ยงimpl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
ยงfn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn ConcreteType>
where ConcreteType
implements Trait
.ยงfn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which can then be further
downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.ยงfn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
โs vtable from &Trait
โs.ยงfn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
โs vtable from &mut Trait
โs.ยงimpl<T> DowncastSend for T
impl<T> DowncastSend for T
ยงimpl<T> DowncastSync for T
impl<T> DowncastSync for T
ยงimpl<Func> EffectFunction<(), NoParam> for Funcwhere
Func: FnMut(),
impl<Func> EffectFunction<(), NoParam> for Funcwhere
Func: FnMut(),
ยงimpl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
ยงfn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
ยงimpl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
ยงfn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Sourceยงimpl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Sourceยงfn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle
.Sourceยงimpl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Sourceยงfn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other
into Self
, while performing the appropriate scaling,
rounding and clamping.ยงimpl<S, T> FromStream<T> for S
impl<S, T> FromStream<T> for S
ยงfn from_stream(stream: impl Stream<Item = T> + Send + 'static) -> S
fn from_stream(stream: impl Stream<Item = T> + Send + 'static) -> S
ยงfn from_stream_unsync(stream: impl Stream<Item = T> + 'static) -> S
fn from_stream_unsync(stream: impl Stream<Item = T> + 'static) -> S
ยงimpl<F, Fut, Res, S> Handler<((),), S> for F
impl<F, Fut, Res, S> Handler<((),), S> for F
ยงtype Future = Pin<Box<dyn Future<Output = Response<Body>> + Send>>
type Future = Pin<Box<dyn Future<Output = Response<Body>> + Send>>
ยงfn call(
self,
_req: Request<Body>,
_state: S,
) -> <F as Handler<((),), S>>::Future
fn call( self, _req: Request<Body>, _state: S, ) -> <F as Handler<((),), S>>::Future
ยงfn layer<L>(self, layer: L) -> Layered<L, Self, T, S>where
L: Layer<HandlerService<Self, T, S>> + Clone,
<L as Layer<HandlerService<Self, T, S>>>::Service: Service<Request<Body>>,
fn layer<L>(self, layer: L) -> Layered<L, Self, T, S>where
L: Layer<HandlerService<Self, T, S>> + Clone,
<L as Layer<HandlerService<Self, T, S>>>::Service: Service<Request<Body>>,
tower::Layer
] to the handler. Read moreยงfn with_state(self, state: S) -> HandlerService<Self, T, S>
fn with_state(self, state: S) -> HandlerService<Self, T, S>
Service
] by providing the stateยงimpl<H, T> HandlerWithoutStateExt<T> for H
impl<H, T> HandlerWithoutStateExt<T> for H
ยงfn into_service(self) -> HandlerService<H, T, ()>
fn into_service(self) -> HandlerService<H, T, ()>
Service
] and no state.ยงfn into_make_service(self) -> IntoMakeService<HandlerService<H, T, ()>>
fn into_make_service(self) -> IntoMakeService<HandlerService<H, T, ()>>
MakeService
and no state. Read moreยงfn into_make_service_with_connect_info<C>(
self,
) -> IntoMakeServiceWithConnectInfo<HandlerService<H, T, ()>, C>
fn into_make_service_with_connect_info<C>( self, ) -> IntoMakeServiceWithConnectInfo<HandlerService<H, T, ()>, C>
MakeService
which stores information
about the incoming connection and has no state. Read moreยงimpl<F, V> InnerHtmlValue for Fwhere
F: ReactiveFunction<Output = V>,
V: InnerHtmlValue + 'static,
<V as InnerHtmlValue>::State: 'static,
impl<F, V> InnerHtmlValue for Fwhere
F: ReactiveFunction<Output = V>,
V: InnerHtmlValue + 'static,
<V as InnerHtmlValue>::State: 'static,
ยงtype AsyncOutput = <V as InnerHtmlValue>::AsyncOutput
type AsyncOutput = <V as InnerHtmlValue>::AsyncOutput
ยงtype State = RenderEffect<<V as InnerHtmlValue>::State>
type State = RenderEffect<<V as InnerHtmlValue>::State>
ยงtype CloneableOwned = Arc<Mutex<dyn FnMut() -> V + Send>>
type CloneableOwned = Arc<Mutex<dyn FnMut() -> V + Send>>
'static
.ยงfn to_template(_buf: &mut String)
fn to_template(_buf: &mut String)
<template>
.ยงfn hydrate<const FROM_SERVER: bool>(
self,
el: &Element,
) -> <F as InnerHtmlValue>::State
fn hydrate<const FROM_SERVER: bool>( self, el: &Element, ) -> <F as InnerHtmlValue>::State
<template>
.ยงfn build(self, el: &Element) -> <F as InnerHtmlValue>::State
fn build(self, el: &Element) -> <F as InnerHtmlValue>::State
ยงfn into_cloneable(self) -> <F as InnerHtmlValue>::Cloneable
fn into_cloneable(self) -> <F as InnerHtmlValue>::Cloneable
ยงfn into_cloneable_owned(self) -> <F as InnerHtmlValue>::CloneableOwned
fn into_cloneable_owned(self) -> <F as InnerHtmlValue>::CloneableOwned
ยงfn dry_resolve(&mut self)
fn dry_resolve(&mut self)
ยงimpl<T> Instrument for T
impl<T> Instrument for T
ยงfn instrument(self, span: Span) -> Instrumented<Self> โ
fn instrument(self, span: Span) -> Instrumented<Self> โ
Sourceยงimpl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Sourceยงfn into_angle(self) -> U
fn into_angle(self) -> U
T
.ยงimpl<T> IntoAny for Twhere
T: Send + RenderHtml,
impl<T> IntoAny for Twhere
T: Send + RenderHtml,
ยงimpl<T> IntoAttributeValue for Twhere
T: AttributeValue,
impl<T> IntoAttributeValue for Twhere
T: AttributeValue,
ยงfn into_attribute_value(self) -> <T as IntoAttributeValue>::Output
fn into_attribute_value(self) -> <T as IntoAttributeValue>::Output
Sourceยงimpl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Sourceยงtype Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters
when converting.Sourceยงfn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.ยงimpl<T> IntoChooseViewMaybeErased for T
impl<T> IntoChooseViewMaybeErased for T
ยงfn into_maybe_erased(self) -> <T as IntoChooseViewMaybeErased>::Output
fn into_maybe_erased(self) -> <T as IntoChooseViewMaybeErased>::Output
ยงimpl<F, C> IntoClass for Fwhere
F: ReactiveFunction<Output = C>,
C: IntoClass + 'static,
<C as IntoClass>::State: 'static,
impl<F, C> IntoClass for Fwhere
F: ReactiveFunction<Output = C>,
C: IntoClass + 'static,
<C as IntoClass>::State: 'static,
ยงtype AsyncOutput = <C as IntoClass>::AsyncOutput
type AsyncOutput = <C as IntoClass>::AsyncOutput
ยงtype State = RenderEffect<<C as IntoClass>::State>
type State = RenderEffect<<C as IntoClass>::State>
ยงtype CloneableOwned = Arc<Mutex<dyn FnMut() -> C + Send>>
type CloneableOwned = Arc<Mutex<dyn FnMut() -> C + Send>>
'static
.ยงfn hydrate<const FROM_SERVER: bool>(
self,
el: &Element,
) -> <F as IntoClass>::State
fn hydrate<const FROM_SERVER: bool>( self, el: &Element, ) -> <F as IntoClass>::State
<template>
.ยงfn build(self, el: &Element) -> <F as IntoClass>::State
fn build(self, el: &Element) -> <F as IntoClass>::State
ยงfn into_cloneable(self) -> <F as IntoClass>::Cloneable
fn into_cloneable(self) -> <F as IntoClass>::Cloneable
ยงfn into_cloneable_owned(self) -> <F as IntoClass>::CloneableOwned
fn into_cloneable_owned(self) -> <F as IntoClass>::CloneableOwned
ยงfn dry_resolve(&mut self)
fn dry_resolve(&mut self)
ยงasync fn resolve(self) -> <F as IntoClass>::AsyncOutput
async fn resolve(self) -> <F as IntoClass>::AsyncOutput
ยงfn reset(state: &mut <F as IntoClass>::State)
fn reset(state: &mut <F as IntoClass>::State)
ยงconst MIN_LENGTH: usize = _
const MIN_LENGTH: usize = _
ยงfn to_template(class: &mut String)
fn to_template(class: &mut String)
<template>
.ยงimpl<T, U> IntoClass for Twhere
T: Fn() -> U + 'static,
U: IntoClassValue,
impl<T, U> IntoClass for Twhere
T: Fn() -> U + 'static,
U: IntoClassValue,
fn into_class(self) -> Class
Sourceยงimpl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Sourceยงfn into_color(self) -> U
fn into_color(self) -> U
Sourceยงimpl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Sourceยงfn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
Sourceยงimpl<T> IntoEither for T
impl<T> IntoEither for T
Sourceยงfn into_either(self, into_left: bool) -> Either<Self, Self> โ
fn into_either(self, into_left: bool) -> Either<Self, Self> โ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSourceยงfn into_either_with<F>(self, into_left: F) -> Either<Self, Self> โ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> โ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreยงimpl<T> IntoMaybeErased for Twhere
T: RenderHtml,
impl<T> IntoMaybeErased for Twhere
T: RenderHtml,
ยงfn into_maybe_erased(self) -> <T as IntoMaybeErased>::Output
fn into_maybe_erased(self) -> <T as IntoMaybeErased>::Output
ยงimpl<F, V> IntoProperty for Fwhere
F: ReactiveFunction<Output = V>,
V: IntoProperty + 'static,
<V as IntoProperty>::State: 'static,
impl<F, V> IntoProperty for Fwhere
F: ReactiveFunction<Output = V>,
V: IntoProperty + 'static,
<V as IntoProperty>::State: 'static,
ยงtype State = RenderEffect<<V as IntoProperty>::State>
type State = RenderEffect<<V as IntoProperty>::State>
ยงtype CloneableOwned = Arc<Mutex<dyn FnMut() -> V + Send>>
type CloneableOwned = Arc<Mutex<dyn FnMut() -> V + Send>>
'static
.ยงfn hydrate<const FROM_SERVER: bool>(
self,
el: &Element,
key: &str,
) -> <F as IntoProperty>::State
fn hydrate<const FROM_SERVER: bool>( self, el: &Element, key: &str, ) -> <F as IntoProperty>::State
ยงfn build(self, el: &Element, key: &str) -> <F as IntoProperty>::State
fn build(self, el: &Element, key: &str) -> <F as IntoProperty>::State
ยงfn rebuild(self, state: &mut <F as IntoProperty>::State, key: &str)
fn rebuild(self, state: &mut <F as IntoProperty>::State, key: &str)
ยงfn into_cloneable(self) -> <F as IntoProperty>::Cloneable
fn into_cloneable(self) -> <F as IntoProperty>::Cloneable
ยงfn into_cloneable_owned(self) -> <F as IntoProperty>::CloneableOwned
fn into_cloneable_owned(self) -> <F as IntoProperty>::CloneableOwned
ยงimpl<T> IntoRender for Twhere
T: Render,
impl<T> IntoRender for Twhere
T: Render,
ยงfn into_render(self) -> <T as IntoRender>::Output
fn into_render(self) -> <T as IntoRender>::Output
Sourceยงimpl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Sourceยงfn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self
into T
, while performing the appropriate scaling,
rounding and clamping.ยงimpl<F, C> IntoStyle for Fwhere
F: ReactiveFunction<Output = C>,
C: IntoStyle + 'static,
<C as IntoStyle>::State: 'static,
impl<F, C> IntoStyle for Fwhere
F: ReactiveFunction<Output = C>,
C: IntoStyle + 'static,
<C as IntoStyle>::State: 'static,
ยงtype AsyncOutput = <C as IntoStyle>::AsyncOutput
type AsyncOutput = <C as IntoStyle>::AsyncOutput
ยงtype State = RenderEffect<<C as IntoStyle>::State>
type State = RenderEffect<<C as IntoStyle>::State>
ยงtype CloneableOwned = Arc<Mutex<dyn FnMut() -> C + Send>>
type CloneableOwned = Arc<Mutex<dyn FnMut() -> C + Send>>
'static
.ยงfn hydrate<const FROM_SERVER: bool>(
self,
el: &Element,
) -> <F as IntoStyle>::State
fn hydrate<const FROM_SERVER: bool>( self, el: &Element, ) -> <F as IntoStyle>::State
<template>
.ยงfn build(self, el: &Element) -> <F as IntoStyle>::State
fn build(self, el: &Element) -> <F as IntoStyle>::State
ยงfn into_cloneable(self) -> <F as IntoStyle>::Cloneable
fn into_cloneable(self) -> <F as IntoStyle>::Cloneable
ยงfn into_cloneable_owned(self) -> <F as IntoStyle>::CloneableOwned
fn into_cloneable_owned(self) -> <F as IntoStyle>::CloneableOwned
ยงfn dry_resolve(&mut self)
fn dry_resolve(&mut self)
ยงimpl<F, S> IntoStyleValue for Fwhere
F: ReactiveFunction<Output = S>,
S: IntoStyleValue + 'static,
impl<F, S> IntoStyleValue for Fwhere
F: ReactiveFunction<Output = S>,
S: IntoStyleValue + 'static,
ยงtype AsyncOutput = F
type AsyncOutput = F
ยงtype State = (Arc<str>, RenderEffect<<S as IntoStyleValue>::State>)
type State = (Arc<str>, RenderEffect<<S as IntoStyleValue>::State>)
ยงtype CloneableOwned = Arc<Mutex<dyn FnMut() -> S + Send>>
type CloneableOwned = Arc<Mutex<dyn FnMut() -> S + Send>>
'static
.ยงfn build(
self,
style: &CssStyleDeclaration,
name: &str,
) -> <F as IntoStyleValue>::State
fn build( self, style: &CssStyleDeclaration, name: &str, ) -> <F as IntoStyleValue>::State
ยงfn rebuild(
self,
style: &CssStyleDeclaration,
name: &str,
state: &mut <F as IntoStyleValue>::State,
)
fn rebuild( self, style: &CssStyleDeclaration, name: &str, state: &mut <F as IntoStyleValue>::State, )
ยงfn hydrate(
self,
style: &CssStyleDeclaration,
name: &str,
) -> <F as IntoStyleValue>::State
fn hydrate( self, style: &CssStyleDeclaration, name: &str, ) -> <F as IntoStyleValue>::State
<template>
.ยงfn into_cloneable(self) -> <F as IntoStyleValue>::Cloneable
fn into_cloneable(self) -> <F as IntoStyleValue>::Cloneable
ยงfn into_cloneable_owned(self) -> <F as IntoStyleValue>::CloneableOwned
fn into_cloneable_owned(self) -> <F as IntoStyleValue>::CloneableOwned
ยงfn dry_resolve(&mut self)
fn dry_resolve(&mut self)
ยงimpl<'a, F, W> MakeWriter<'a> for F
impl<'a, F, W> MakeWriter<'a> for F
ยงtype Writer = W
type Writer = W
io::Write
implementation returned by make_writer
.ยงfn make_writer(&'a self) -> <F as MakeWriter<'a>>::Writer
fn make_writer(&'a self) -> <F as MakeWriter<'a>>::Writer
ยงfn make_writer_for(&'a self, meta: &Metadata<'_>) -> Self::Writer
fn make_writer_for(&'a self, meta: &Metadata<'_>) -> Self::Writer
ยงimpl<'a, M> MakeWriterExt<'a> for Mwhere
M: MakeWriter<'a>,
impl<'a, M> MakeWriterExt<'a> for Mwhere
M: MakeWriter<'a>,
ยงfn with_max_level(self, level: Level) -> WithMaxLevel<Self>where
Self: Sized,
fn with_max_level(self, level: Level) -> WithMaxLevel<Self>where
Self: Sized,
ยงfn with_min_level(self, level: Level) -> WithMinLevel<Self>where
Self: Sized,
fn with_min_level(self, level: Level) -> WithMinLevel<Self>where
Self: Sized,
ยงfn with_filter<F>(self, filter: F) -> WithFilter<Self, F>
fn with_filter<F>(self, filter: F) -> WithFilter<Self, F>
ยงfn or_else<W, B>(self, other: B) -> OrElse<Self, B>
fn or_else<W, B>(self, other: B) -> OrElse<Self, B>
self
with another type implementing [MakeWriter
], returning
a new [MakeWriter
] that calls other
โs make_writer
if self
โs
make_writer
returns OptionalWriter::none
. Read moreยงimpl<T> Pointable for T
impl<T> Pointable for T
ยงimpl<T> Pointee for T
impl<T> Pointee for T
ยงimpl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
ยงimpl<F, T> ReactiveFunction for F
impl<F, T> ReactiveFunction for F
ยงimpl<T> Read for Twhere
T: Track + ReadUntracked,
impl<T> Read for Twhere
T: Track + ReadUntracked,
ยงimpl<F, V> Render for F
impl<F, V> Render for F
ยงimpl<F, V> RenderHtml for F
impl<F, V> RenderHtml for F
ยงconst MIN_LENGTH: usize = 0usize
const MIN_LENGTH: usize = 0usize
ยงtype AsyncOutput = <V as RenderHtml>::AsyncOutput
type AsyncOutput = <V as RenderHtml>::AsyncOutput
ยงfn dry_resolve(&mut self)
fn dry_resolve(&mut self)
ยงasync fn resolve(self) -> <F as RenderHtml>::AsyncOutput
async fn resolve(self) -> <F as RenderHtml>::AsyncOutput
ยงfn to_html_with_buf(
self,
buf: &mut String,
position: &mut Position,
escape: bool,
mark_branches: bool,
extra_attrs: Vec<AnyAttribute>,
)
fn to_html_with_buf( self, buf: &mut String, position: &mut Position, escape: bool, mark_branches: bool, extra_attrs: Vec<AnyAttribute>, )
ยงfn to_html_async_with_buf<const OUT_OF_ORDER: bool>(
self,
buf: &mut StreamBuilder,
position: &mut Position,
escape: bool,
mark_branches: bool,
extra_attrs: Vec<AnyAttribute>,
)
fn to_html_async_with_buf<const OUT_OF_ORDER: bool>( self, buf: &mut StreamBuilder, position: &mut Position, escape: bool, mark_branches: bool, extra_attrs: Vec<AnyAttribute>, )
ยงfn hydrate<const FROM_SERVER: bool>(
self,
cursor: &Cursor,
position: &PositionState,
) -> <F as Render>::State
fn hydrate<const FROM_SERVER: bool>( self, cursor: &Cursor, position: &PositionState, ) -> <F as Render>::State
ยงasync fn hydrate_async(
self,
cursor: &Cursor,
position: &PositionState,
) -> <F as Render>::State
async fn hydrate_async( self, cursor: &Cursor, position: &PositionState, ) -> <F as Render>::State
ยงfn into_owned(self) -> <F as RenderHtml>::Owned
fn into_owned(self) -> <F as RenderHtml>::Owned
'static
.ยงconst EXISTS: bool = true
const EXISTS: bool = true
ยงfn to_html_branching(self) -> Stringwhere
Self: Sized,
fn to_html_branching(self) -> Stringwhere
Self: Sized,
ยงfn to_html_stream_in_order(self) -> StreamBuilderwhere
Self: Sized,
fn to_html_stream_in_order(self) -> StreamBuilderwhere
Self: Sized,
ยงfn to_html_stream_in_order_branching(self) -> StreamBuilderwhere
Self: Sized,
fn to_html_stream_in_order_branching(self) -> StreamBuilderwhere
Self: Sized,
ยงfn to_html_stream_out_of_order(self) -> StreamBuilderwhere
Self: Sized,
fn to_html_stream_out_of_order(self) -> StreamBuilderwhere
Self: Sized,
ยงfn to_html_stream_out_of_order_branching(self) -> StreamBuilderwhere
Self: Sized,
fn to_html_stream_out_of_order_branching(self) -> StreamBuilderwhere
Self: Sized,
ยงfn hydrate_from<const FROM_SERVER: bool>(self, el: &Element) -> Self::Statewhere
Self: Sized,
fn hydrate_from<const FROM_SERVER: bool>(self, el: &Element) -> Self::Statewhere
Self: Sized,
RenderHtml::hydrate
, beginning at the given element.ยงfn hydrate_from_position<const FROM_SERVER: bool>(
self,
el: &Element,
position: Position,
) -> Self::Statewhere
Self: Sized,
fn hydrate_from_position<const FROM_SERVER: bool>(
self,
el: &Element,
position: Position,
) -> Self::Statewhere
Self: Sized,
RenderHtml::hydrate
, beginning at the given element and position.ยงimpl<T> SerializableKey for T
impl<T> SerializableKey for T
ยงimpl<T> StorageAccess<T> for T
impl<T> StorageAccess<T> for T
ยงfn as_borrowed(&self) -> &T
fn as_borrowed(&self) -> &T
ยงfn into_taken(self) -> T
fn into_taken(self) -> T
ยงimpl<F> ToHref for F
impl<F> ToHref for F
ยงimpl<F, V> ToTemplate for Fwhere
F: ReactiveFunction<Output = V>,
V: ToTemplate,
impl<F, V> ToTemplate for Fwhere
F: ReactiveFunction<Output = V>,
V: ToTemplate,
ยงfn to_template(
buf: &mut String,
class: &mut String,
style: &mut String,
inner_html: &mut String,
position: &mut Position,
)
fn to_template( buf: &mut String, class: &mut String, style: &mut String, inner_html: &mut String, position: &mut Position, )
<template>
that corresponds
to a view of a particular type.Sourceยงimpl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Sourceยงtype Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors
fails to cast.Sourceยงfn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Sourceยงimpl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Sourceยงfn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds
error is returned which contains
the unclamped color. Read moreSourceยงimpl<C, U> UintsFrom<C> for Uwhere
C: IntoUints<U>,
impl<C, U> UintsFrom<C> for Uwhere
C: IntoUints<U>,
Sourceยงfn uints_from(colors: C) -> U
fn uints_from(colors: C) -> U
Sourceยงimpl<C, U> UintsInto<C> for Uwhere
C: FromUints<U>,
impl<C, U> UintsInto<C> for Uwhere
C: FromUints<U>,
Sourceยงfn uints_into(self) -> C
fn uints_into(self) -> C
ยงimpl<T> With for Twhere
T: Read,
impl<T> With for Twhere
T: Read,
ยงimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
ยงfn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> โwhere
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> โwhere
S: Into<Dispatch>,
ยงfn with_current_subscriber(self) -> WithDispatch<Self> โ
fn with_current_subscriber(self) -> WithDispatch<Self> โ
ยงimpl<T> WithUntracked for Twhere
T: DefinedAt + ReadUntracked,
impl<T> WithUntracked for Twhere
T: DefinedAt + ReadUntracked,
ยงtype Value = <<T as ReadUntracked>::Value as Deref>::Target
type Value = <<T as ReadUntracked>::Value as Deref>::Target
ยงfn try_with_untracked<U>(
&self,
fun: impl FnOnce(&<T as WithUntracked>::Value) -> U,
) -> Option<U>
fn try_with_untracked<U>( &self, fun: impl FnOnce(&<T as WithUntracked>::Value) -> U, ) -> Option<U>
None
if the signal has already been disposed.