Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/dog_app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ fn BreedPic(breed: WriteSignal<String>) -> Element {
.await
});

match fut.read_unchecked().as_ref() {
match fut.read_extended().as_ref() {
Some(Ok(resp)) => rsx! {
div {
button { onclick: move |_| fut.restart(), padding: "5px", background_color: "gray", color: "white", border_radius: "5px", "Click to fetch another doggo" }
Expand Down
2 changes: 1 addition & 1 deletion examples/suspense.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ fn Doggo() -> Element {
}
})?;

match value.read_unchecked().as_ref() {
match value.read_extended().as_ref() {
Ok(resp) => rsx! {
button { onclick: move |_| resource.restart(), "Click to fetch another doggo" }
div { img { max_width: "500px", max_height: "500px", src: "{resp.message}" } }
Expand Down
2 changes: 1 addition & 1 deletion packages/autofmt/tests/samples/spaces.rsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
rsx! {
if let Some(Some(record)) = &*records.read_unchecked() {
if let Some(Some(record)) = &*records.read_extended() {
{
let (label, value): (Vec<String>, Vec<f64>) = record
.iter()
Expand Down
2 changes: 1 addition & 1 deletion packages/core/tests/memory_leak.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ async fn test_for_memory_leaks() {
spawn(async move {
loop {
tokio::time::sleep(std::time::Duration::from_nanos(1)).await;
let val = *count.peek_unchecked();
let val = *count.peek_extended();
if val == 70 {
count.set(0);
} else {
Expand Down
2 changes: 1 addition & 1 deletion packages/hooks/docs/use_resource.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ fn app() -> Element {
// conditionally render elements based off if it's future
// finished (Some(Ok(_)), errored Some(Err(_)),
// or is still running (None)
match &*current_weather.read_unchecked() {
match &*current_weather.read_extended() {
Some(Ok(weather)) => rsx! { WeatherElement { weather } },
Some(Err(e)) => rsx! { p { "Loading weather failed, {e}" } },
None => rsx! { p { "Loading..." } }
Expand Down
8 changes: 4 additions & 4 deletions packages/hooks/src/use_future.rs
Original file line number Diff line number Diff line change
Expand Up @@ -168,17 +168,17 @@ impl Readable for UseFuture {
type Storage = UnsyncStorage;

#[track_caller]
fn try_read_unchecked(
fn try_read_extended(
&self,
) -> Result<ReadableRef<'static, Self>, generational_box::BorrowError> {
self.state.try_read_unchecked()
self.state.try_read_extended()
}

#[track_caller]
fn try_peek_unchecked(
fn try_peek_extended(
&self,
) -> Result<ReadableRef<'static, Self>, generational_box::BorrowError> {
self.state.try_peek_unchecked()
self.state.try_peek_extended()
}

fn subscribers(&self) -> Subscribers {
Expand Down
16 changes: 8 additions & 8 deletions packages/hooks/src/use_resource.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,8 @@ where
///
/// // Since our resource may not be ready yet, the value is an Option. Our request may also fail, so the get function returns a Result
/// // The complete type we need to match is `Option<Result<String, reqwest::Error>>`
/// // We can use `read_unchecked` to keep our matching code in one statement while avoiding a temporary variable error (this is still completely safe because dioxus checks the borrows at runtime)
/// match &*resource.read_unchecked() {
/// // We can use `read_extended` to keep our matching code in one statement while avoiding a temporary variable error (this is still completely safe because dioxus checks the borrows at runtime)
/// match &*resource.read_extended() {
/// Some(Ok(value)) => rsx! { "{value:?}" },
/// Some(Err(err)) => rsx! { "Error: {err}" },
/// None => rsx! { "Loading..." },
Expand Down Expand Up @@ -402,8 +402,8 @@ impl<T> Resource<T> {
///
/// // Since our resource may not be ready yet, the value is an Option. Our request may also fail, so the get function returns a Result
/// // The complete type we need to match is `Option<Result<String, reqwest::Error>>`
/// // We can use `read_unchecked` to keep our matching code in one statement while avoiding a temporary variable error (this is still completely safe because dioxus checks the borrows at runtime)
/// match &*value.read_unchecked() {
/// // We can use `read_extended` to keep our matching code in one statement while avoiding a temporary variable error (this is still completely safe because dioxus checks the borrows at runtime)
/// match &*value.read_extended() {
/// Some(Ok(value)) => rsx! { "{value:?}" },
/// Some(Err(err)) => rsx! { "Error: {err}" },
/// None => rsx! { "Loading..." },
Expand Down Expand Up @@ -441,17 +441,17 @@ impl<T> Readable for Resource<T> {
type Storage = UnsyncStorage;

#[track_caller]
fn try_read_unchecked(
fn try_read_extended(
&self,
) -> Result<ReadableRef<'static, Self>, generational_box::BorrowError> {
self.value.try_read_unchecked()
self.value.try_read_extended()
}

#[track_caller]
fn try_peek_unchecked(
fn try_peek_extended(
&self,
) -> Result<ReadableRef<'static, Self>, generational_box::BorrowError> {
self.value.try_peek_unchecked()
self.value.try_peek_extended()
}

fn subscribers(&self) -> Subscribers {
Expand Down
12 changes: 6 additions & 6 deletions packages/router/src/contexts/router.rs
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ impl RouterContext {

pub(crate) fn push_any(&self, target: NavigationTarget) -> Option<ExternalNavigationFailure> {
{
let mut write = self.inner.write_unchecked();
let mut write = self.inner.write_extended();
match target {
NavigationTarget::Internal(p) => history().push(p),
NavigationTarget::External(e) => return write.external(e),
Expand All @@ -217,7 +217,7 @@ impl RouterContext {
pub fn push(&self, target: impl Into<NavigationTarget>) -> Option<ExternalNavigationFailure> {
let target = target.into();
{
let mut write = self.inner.write_unchecked();
let mut write = self.inner.write_extended();
match target {
NavigationTarget::Internal(p) => {
let history = history();
Expand All @@ -239,7 +239,7 @@ impl RouterContext {
) -> Option<ExternalNavigationFailure> {
let target = target.into();
{
let mut state = self.inner.write_unchecked();
let mut state = self.inner.write_extended();
match target {
NavigationTarget::Internal(p) => {
let history = history();
Expand Down Expand Up @@ -291,7 +291,7 @@ impl RouterContext {

/// Clear any unresolved errors
pub fn clear_error(&self) {
let mut write_inner = self.inner.write_unchecked();
let mut write_inner = self.inner.write_extended();
write_inner.unresolved_error = None;

write_inner.update_subscribers();
Expand All @@ -303,7 +303,7 @@ impl RouterContext {
}

pub(crate) fn render_error(&self) -> Option<Element> {
let inner_write = self.inner.write_unchecked();
let inner_write = self.inner.write_extended();
inner_write.subscribe_to_current_context();
inner_write
.unresolved_error
Expand All @@ -318,7 +318,7 @@ impl RouterContext {
let callback = callback.clone();
drop(self_read);
if let Some(new) = callback(myself) {
let mut self_write = self.inner.write_unchecked();
let mut self_write = self.inner.write_extended();
match new {
NavigationTarget::Internal(p) => {
let history = history();
Expand Down
2 changes: 1 addition & 1 deletion packages/signals/docs/signals.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ Just like `RefCell<T>`, Signal checks borrows at runtime. If you read and write
# use dioxus::prelude::*;
let mut signal = use_signal(|| 0);
// If you create a read and hold it while you write to the signal, it will panic
let read = signal.read_unchecked();
let read = signal.read_extended();
// This will panic
signal += 1;
println!("{}", read);
Expand Down
59 changes: 18 additions & 41 deletions packages/signals/src/boxed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -105,34 +105,26 @@ impl<T: ?Sized> Readable for ReadSignal<T> {
type Storage = UnsyncStorage;

#[track_caller]
fn try_read_unchecked(
&self,
) -> Result<ReadableRef<'static, Self>, generational_box::BorrowError>
fn try_read_extended(&self) -> Result<ReadableRef<'static, Self>, generational_box::BorrowError>
where
T: 'static,
{
self.value
.try_peek_unchecked()
.unwrap()
.try_read_unchecked()
self.value.try_peek_extended().unwrap().try_read_extended()
}

#[track_caller]
fn try_peek_unchecked(&self) -> BorrowResult<ReadableRef<'static, Self>>
fn try_peek_extended(&self) -> BorrowResult<ReadableRef<'static, Self>>
where
T: 'static,
{
self.value
.try_peek_unchecked()
.unwrap()
.try_peek_unchecked()
self.value.try_peek_extended().unwrap().try_peek_extended()
}

fn subscribers(&self) -> Subscribers
where
T: 'static,
{
self.value.try_peek_unchecked().unwrap().subscribers()
self.value.try_peek_extended().unwrap().subscribers()
}
}

Expand Down Expand Up @@ -223,22 +215,18 @@ impl<W: Readable> Readable for BoxWriteMetadata<W> {

type Storage = W::Storage;

fn try_read_unchecked(
&self,
) -> Result<ReadableRef<'static, Self>, generational_box::BorrowError>
fn try_read_extended(&self) -> Result<ReadableRef<'static, Self>, generational_box::BorrowError>
where
W::Target: 'static,
{
self.value.try_read_unchecked()
self.value.try_read_extended()
}

fn try_peek_unchecked(
&self,
) -> Result<ReadableRef<'static, Self>, generational_box::BorrowError>
fn try_peek_extended(&self) -> Result<ReadableRef<'static, Self>, generational_box::BorrowError>
where
W::Target: 'static,
{
self.value.try_peek_unchecked()
self.value.try_peek_extended()
}

fn subscribers(&self) -> Subscribers
Expand All @@ -256,14 +244,14 @@ where
{
type WriteMetadata = Box<dyn Any>;

fn try_write_unchecked(
fn try_write_extended(
&self,
) -> Result<crate::WritableRef<'static, Self>, generational_box::BorrowMutError>
where
W::Target: 'static,
{
self.value
.try_write_unchecked()
.try_write_extended()
.map(|w| w.map_metadata(|data| Box::new(data) as Box<dyn Any>))
}
}
Expand Down Expand Up @@ -316,50 +304,39 @@ impl<T: ?Sized> Readable for WriteSignal<T> {
type Storage = UnsyncStorage;

#[track_caller]
fn try_read_unchecked(
&self,
) -> Result<ReadableRef<'static, Self>, generational_box::BorrowError>
fn try_read_extended(&self) -> Result<ReadableRef<'static, Self>, generational_box::BorrowError>
where
T: 'static,
{
self.value
.try_peek_unchecked()
.unwrap()
.try_read_unchecked()
self.value.try_peek_extended().unwrap().try_read_extended()
}

#[track_caller]
fn try_peek_unchecked(&self) -> BorrowResult<ReadableRef<'static, Self>>
fn try_peek_extended(&self) -> BorrowResult<ReadableRef<'static, Self>>
where
T: 'static,
{
self.value
.try_peek_unchecked()
.unwrap()
.try_peek_unchecked()
self.value.try_peek_extended().unwrap().try_peek_extended()
}

fn subscribers(&self) -> Subscribers
where
T: 'static,
{
self.value.try_peek_unchecked().unwrap().subscribers()
self.value.try_peek_extended().unwrap().subscribers()
}
}

impl<T: ?Sized> Writable for WriteSignal<T> {
type WriteMetadata = Box<dyn Any>;

fn try_write_unchecked(
fn try_write_extended(
&self,
) -> Result<crate::WritableRef<'static, Self>, generational_box::BorrowMutError>
where
T: 'static,
{
self.value
.try_peek_unchecked()
.unwrap()
.try_write_unchecked()
self.value.try_peek_extended().unwrap().try_write_extended()
}
}

Expand Down
6 changes: 3 additions & 3 deletions packages/signals/src/copy_value.rs
Original file line number Diff line number Diff line change
Expand Up @@ -153,15 +153,15 @@ impl<T, S: Storage<T>> Readable for CopyValue<T, S> {
type Storage = S;

#[track_caller]
fn try_read_unchecked(
fn try_read_extended(
&self,
) -> Result<ReadableRef<'static, Self>, generational_box::BorrowError> {
crate::warnings::copy_value_hoisted(self, std::panic::Location::caller());
self.value.try_read()
}

#[track_caller]
fn try_peek_unchecked(&self) -> BorrowResult<ReadableRef<'static, Self>> {
fn try_peek_extended(&self) -> BorrowResult<ReadableRef<'static, Self>> {
crate::warnings::copy_value_hoisted(self, std::panic::Location::caller());
self.value.try_read()
}
Expand All @@ -175,7 +175,7 @@ impl<T, S: Storage<T>> Writable for CopyValue<T, S> {
type WriteMetadata = ();

#[track_caller]
fn try_write_unchecked(
fn try_write_extended(
&self,
) -> Result<WritableRef<'static, Self>, generational_box::BorrowMutError> {
crate::warnings::copy_value_hoisted(self, std::panic::Location::caller());
Expand Down
16 changes: 7 additions & 9 deletions packages/signals/src/global/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,21 +52,19 @@ where
type Storage = T::Storage;

#[track_caller]
fn try_read_unchecked(
&self,
) -> Result<ReadableRef<'static, Self>, generational_box::BorrowError>
fn try_read_extended(&self) -> Result<ReadableRef<'static, Self>, generational_box::BorrowError>
where
R: 'static,
{
self.resolve().try_read_unchecked()
self.resolve().try_read_extended()
}

#[track_caller]
fn try_peek_unchecked(&self) -> BorrowResult<ReadableRef<'static, Self>>
fn try_peek_extended(&self) -> BorrowResult<ReadableRef<'static, Self>>
where
R: 'static,
{
self.resolve().try_peek_unchecked()
self.resolve().try_peek_extended()
}

fn subscribers(&self) -> Subscribers
Expand All @@ -84,10 +82,10 @@ where
type WriteMetadata = T::WriteMetadata;

#[track_caller]
fn try_write_unchecked(
fn try_write_extended(
&self,
) -> Result<WritableRef<'static, Self>, generational_box::BorrowMutError> {
self.resolve().try_write_unchecked()
self.resolve().try_write_extended()
}
}

Expand All @@ -97,7 +95,7 @@ where
{
/// Write this value
pub fn write(&self) -> WritableRef<'static, T, R> {
self.resolve().try_write_unchecked().unwrap()
self.resolve().try_write_extended().unwrap()
}

/// Run a closure with a mutable reference to the signal's value.
Expand Down
Loading
Loading