add a bunch more utilities to the trait

This commit is contained in:
Evan Almloff committed 2024-01-23 10:56:26 -06:00
1 parent c83ca7b15f
commit 7f93263357
10 files changed
+372 -382

No files matched your search

+3 -1
View File
@@ -51,7 +51,7 @@ impl<T: PartialEq + 'static> GlobalMemo<T> {
}
}
impl<T: PartialEq + 'static> Readable<T> for GlobalMemo<T> {
impl<T: PartialEq + 'static> crate::ReadableRef for GlobalMemo<T> {
type Ref<R: ?Sized + 'static> = generational_box::GenerationalRef<std::cell::Ref<'static, R>>;
fn map_ref<I, U: ?Sized, F: FnOnce(&I) -> &U>(ref_: Self::Ref<I>, f: F) -> Self::Ref<U> {
@@ -64,7 +64,9 @@ impl<T: PartialEq + 'static> Readable<T> for GlobalMemo<T> {
) -> Option<Self::Ref<U>> {
<UnsyncStorage as AnyStorage>::try_map(ref_, f)
}
}
impl<T: PartialEq + 'static> Readable<T> for GlobalMemo<T> {
#[track_caller]
fn read(&self) -> Self::Ref<T> {
self.signal().read()
+30 -1
View File
@@ -1,5 +1,7 @@
use crate::read::Readable;
use crate::write::Writable;
use crate::WritableRef;
use crate::Write;
use dioxus_core::prelude::{IntoAttributeValue, ScopeId};
use generational_box::{AnyStorage, GenerationalRef, UnsyncStorage};
use std::{cell::Ref, mem::MaybeUninit, ops::Deref};
@@ -68,7 +70,7 @@ impl<T: 'static> GlobalSignal<T> {
}
}
impl<T: 'static> Readable<T> for GlobalSignal<T> {
impl<T: 'static> crate::ReadableRef for GlobalSignal<T> {
type Ref<R: ?Sized + 'static> = generational_box::GenerationalRef<std::cell::Ref<'static, R>>;
fn map_ref<I, U: ?Sized, F: FnOnce(&I) -> &U>(ref_: Self::Ref<I>, f: F) -> Self::Ref<U> {
@@ -81,7 +83,9 @@ impl<T: 'static> Readable<T> for GlobalSignal<T> {
) -> Option<Self::Ref<U>> {
<UnsyncStorage as AnyStorage>::try_map(ref_, f)
}
}
impl<T: 'static> Readable<T> for GlobalSignal<T> {
#[track_caller]
fn read(&self) -> Self::Ref<T> {
self.signal().read()
@@ -93,6 +97,31 @@ impl<T: 'static> Readable<T> for GlobalSignal<T> {
}
}
impl<T: 'static> WritableRef for GlobalSignal<T> {
type Mut<R: ?Sized + 'static> = Write<R, UnsyncStorage>;
fn map_mut<I, U: ?Sized + 'static, F: FnOnce(&mut I) -> &mut U>(
ref_: Self::Mut<I>,
f: F,
) -> Self::Mut<U> {
Write::map(ref_, f)
}
fn try_map_mut<I: 'static, U: ?Sized + 'static, F: FnOnce(&mut I) -> Option<&mut U>>(
ref_: Self::Mut<I>,
f: F,
) -> Option<Self::Mut<U>> {
Write::filter_map(ref_, f)
}
}
impl<T: 'static> Writable<T> for GlobalSignal<T> {
#[track_caller]
fn try_write(&self) -> Result<Self::Mut<T>, generational_box::BorrowMutError> {
self.signal().try_write()
}
}
impl<T: 'static> IntoAttributeValue for GlobalSignal<T>
where
T: Clone + IntoAttributeValue,