add a bunch more utilities to the trait
This commit is contained in:
1 parent
c83ca7b15f
commit
7f93263357
10 files changed
+372
-382
No files matched your search
@@ -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()
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in new issue
Block a user