Explorar o código

simplify the crm example a bit more

Evan Almloff hai 1 ano
pai
achega
f2e48f10e9

+ 1 - 1
examples/crm.rs

@@ -51,7 +51,7 @@ fn ClientList() -> Element {
         h2 { "List of Clients" }
         Link { to: Route::ClientAdd, class: "pure-button pure-button-primary", "Add Client" }
         Link { to: Route::Settings, class: "pure-button", "Settings" }
-        for client in CLIENTS.read().iter() {
+        for client in CLIENTS.iter() {
             div { class: "client", style: "margin-bottom: 50px",
                 p { "Name: {client.first_name} {client.last_name}" }
                 p { "Description: {client.description}" }

+ 1 - 32
packages/signals/src/impls.rs

@@ -1,9 +1,8 @@
 use crate::read::Readable;
-use crate::read::ReadableVecExt;
 use crate::rt::CopyValue;
 use crate::signal::Signal;
 use crate::write::Writable;
-use crate::{GlobalMemo, GlobalSignal, ReadOnlySignal, ReadableValueIterator, SignalData};
+use crate::{GlobalMemo, GlobalSignal, ReadOnlySignal, SignalData};
 use generational_box::Storage;
 
 use std::{
@@ -124,16 +123,6 @@ impl<T: 'static, S: Storage<T>> Clone for CopyValue<T, S> {
 
 impl<T: 'static, S: Storage<T>> Copy for CopyValue<T, S> {}
 
-impl<T: 'static, S: Storage<Vec<T>>> IntoIterator for CopyValue<Vec<T>, S> {
-    type IntoIter = ReadableValueIterator<T, Self>;
-
-    type Item = S::Ref<T>;
-
-    fn into_iter(self) -> Self::IntoIter {
-        self.iter()
-    }
-}
-
 read_impls!(Signal, S: Storage<SignalData<T>>, S: Storage<SignalData<Vec<T>>>);
 write_impls!(Signal, Storage<SignalData<T>>, Storage<SignalData<Vec<T>>>);
 
@@ -145,16 +134,6 @@ impl<T: 'static, S: Storage<SignalData<T>>> Clone for Signal<T, S> {
 
 impl<T: 'static, S: Storage<SignalData<T>>> Copy for Signal<T, S> {}
 
-impl<T: 'static, S: Storage<SignalData<Vec<T>>>> IntoIterator for Signal<Vec<T>, S> {
-    type IntoIter = ReadableValueIterator<T, Self>;
-
-    type Item = S::Ref<T>;
-
-    fn into_iter(self) -> Self::IntoIter {
-        self.iter()
-    }
-}
-
 read_impls!(
     ReadOnlySignal,
     S: Storage<SignalData<T>>,
@@ -169,16 +148,6 @@ impl<T: 'static, S: Storage<SignalData<T>>> Clone for ReadOnlySignal<T, S> {
 
 impl<T: 'static, S: Storage<SignalData<T>>> Copy for ReadOnlySignal<T, S> {}
 
-impl<T: 'static, S: Storage<SignalData<Vec<T>>>> IntoIterator for ReadOnlySignal<Vec<T>, S> {
-    type IntoIter = ReadableValueIterator<T, Self>;
-
-    type Item = S::Ref<T>;
-
-    fn into_iter(self) -> Self::IntoIter {
-        self.iter()
-    }
-}
-
 read_impls!(GlobalSignal);
 
 read_impls!(GlobalMemo: PartialEq);

+ 6 - 6
packages/signals/src/read.rs

@@ -85,26 +85,26 @@ pub trait ReadableVecExt<T: 'static>: Readable<Vec<T>> {
 
     /// Get an iterator over the values of the inner vector.
     #[track_caller]
-    fn iter(&self) -> ReadableValueIterator<T, Self>
+    fn iter(&self) -> ReadableValueIterator<'_, T, Self>
     where
-        Self: Sized + Clone,
+        Self: Sized,
     {
         ReadableValueIterator {
             index: 0,
-            value: self.clone(),
+            value: self,
             phantom: std::marker::PhantomData,
         }
     }
 }
 
 /// An iterator over the values of a `Readable<Vec<T>>`.
-pub struct ReadableValueIterator<T, R> {
+pub struct ReadableValueIterator<'a, T, R> {
     index: usize,
-    value: R,
+    value: &'a R,
     phantom: std::marker::PhantomData<T>,
 }
 
-impl<T: 'static, R: Readable<Vec<T>>> Iterator for ReadableValueIterator<T, R> {
+impl<'a, T: 'static, R: Readable<Vec<T>>> Iterator for ReadableValueIterator<'a, T, R> {
     type Item = R::Ref<T>;
 
     fn next(&mut self) -> Option<Self::Item> {

+ 1 - 1
packages/signals/src/write.rs

@@ -175,7 +175,7 @@ pub trait WritableVecExt<T: 'static>: Writable<Vec<T>> {
 
     /// Gets an iterator over the values of the vector.
     #[track_caller]
-    fn iter(&self) -> WritableValueIterator<T, Self>
+    fn iter_mut(&self) -> WritableValueIterator<T, Self>
     where
         Self: Sized + Clone,
     {