@@ -122,10 +122,11 @@ impl<T> IntoInert<T> for T {
122
122
/// For RW version of [`MaybeReactive`] see [`MaybeSignal`]
123
123
pub enum MaybeReactive < T : PartialEq + ' static > {
124
124
Inert ( Inert < T > ) ,
125
+ // TODO: Remove Signal, Memo can now store signals
125
126
Signal ( Signal < T > ) ,
126
127
Memo ( Memo < T > ) ,
127
128
MemoChain ( MemoChain < T > ) ,
128
- Derived ( Rc < RefCell < dyn FnMut ( ) -> T > > ) ,
129
+ // Derived(Rc<RefCell<dyn FnMut() -> T>>),
129
130
}
130
131
131
132
impl_read_signal_traits ! ( MaybeReactive <T >: PartialEq ) ;
@@ -135,9 +136,9 @@ impl<T: PartialEq + 'static> MaybeReactive<T> {
135
136
Self :: Inert ( value. inert ( ) )
136
137
}
137
138
138
- pub fn new_derived ( f : impl FnMut ( ) -> T + ' static ) -> Self {
139
- Self :: Derived ( Rc :: new ( RefCell :: new ( f) ) )
140
- }
139
+ // pub fn new_derived(f: impl FnMut() -> T + 'static) -> Self {
140
+ // Self::Derived(Rc::new(RefCell::new(f)))
141
+ // }
141
142
}
142
143
143
144
impl < T : PartialEq + ' static > ReactiveValue for MaybeReactive < T > {
@@ -150,7 +151,7 @@ impl<T: PartialEq + 'static> ReactiveValue for MaybeReactive<T> {
150
151
MaybeReactive :: Signal ( signal) => signal. is_alive ( ) ,
151
152
MaybeReactive :: Memo ( memo) => memo. is_alive ( ) ,
152
153
MaybeReactive :: MemoChain ( memo_chain) => memo_chain. is_alive ( ) ,
153
- MaybeReactive :: Derived ( _) => true ,
154
+ // MaybeReactive::Derived(_) => true,
154
155
}
155
156
}
156
157
@@ -161,7 +162,7 @@ impl<T: PartialEq + 'static> ReactiveValue for MaybeReactive<T> {
161
162
MaybeReactive :: Signal ( signal) => signal. dispose ( ) ,
162
163
MaybeReactive :: Memo ( memo) => memo. dispose ( ) ,
163
164
MaybeReactive :: MemoChain ( memo_chain) => memo_chain. dispose ( ) ,
164
- MaybeReactive :: Derived ( derived) => core:: mem:: drop ( derived) ,
165
+ // MaybeReactive::Derived(derived) => core::mem::drop(derived),
165
166
}
166
167
}
167
168
}
@@ -174,7 +175,7 @@ impl<T: PartialEq + 'static> ReadSignal<T> for MaybeReactive<T> {
174
175
MaybeReactive :: Signal ( signal) => signal. track ( ) ,
175
176
MaybeReactive :: Memo ( memo) => memo. track ( ) ,
176
177
MaybeReactive :: MemoChain ( memo_chain) => memo_chain. track ( ) ,
177
- MaybeReactive :: Derived ( _) => { } ,
178
+ // MaybeReactive::Derived(_) => {},
178
179
}
179
180
}
180
181
@@ -187,7 +188,7 @@ impl<T: PartialEq + 'static> ReadSignal<T> for MaybeReactive<T> {
187
188
MaybeReactive :: MemoChain ( memo_chain) => {
188
189
memo_chain. with_untracked ( f)
189
190
} ,
190
- MaybeReactive :: Derived ( derived) => f ( & derived. borrow_mut ( ) ( ) ) ,
191
+ // MaybeReactive::Derived(derived) => f(&derived.borrow_mut()()),
191
192
}
192
193
}
193
194
}
@@ -217,10 +218,10 @@ impl<T: PartialEq + 'static> SignalMap<T> for MaybeReactive<T> {
217
218
MaybeReactive :: MemoChain ( memo_chain) => {
218
219
MaybeReactive :: Memo ( memo_chain. map ( map) )
219
220
} ,
220
- MaybeReactive :: Derived ( derived) => {
221
- let derived = Rc :: clone ( derived) ;
222
- MaybeReactive :: new_derived ( move || map ( & derived. borrow_mut ( ) ( ) ) )
223
- } ,
221
+ // MaybeReactive::Derived(derived) => {
222
+ // let derived = Rc::clone(derived);
223
+ // MaybeReactive::new_derived(move || map(&derived.borrow_mut()()))
224
+ // },
224
225
}
225
226
}
226
227
}
@@ -253,13 +254,13 @@ impl<T: PartialEq + 'static> IntoMaybeReactive<T> for MemoChain<T> {
253
254
}
254
255
}
255
256
256
- impl < T : PartialEq + ' static , F : FnMut ( ) -> T + ' static > IntoMaybeReactive < T >
257
- for F
258
- {
259
- fn maybe_reactive ( self ) -> MaybeReactive < T > {
260
- MaybeReactive :: new_derived ( self )
261
- }
262
- }
257
+ // impl<T: PartialEq + 'static, F: FnMut() -> T + 'static> IntoMaybeReactive<T>
258
+ // for F
259
+ // {
260
+ // fn maybe_reactive(self) -> MaybeReactive<T> {
261
+ // MaybeReactive::new_derived(self)
262
+ // }
263
+ // }
263
264
264
265
impl < T : PartialEq + ' static > IntoMaybeReactive < T > for Inert < T > {
265
266
fn maybe_reactive ( self ) -> MaybeReactive < T > {
@@ -274,11 +275,13 @@ impl<T: PartialEq + Clone + 'static> Clone for MaybeReactive<T> {
274
275
Self :: Signal ( arg0) => Self :: Signal ( arg0. clone ( ) ) ,
275
276
Self :: Memo ( arg0) => Self :: Memo ( arg0. clone ( ) ) ,
276
277
Self :: MemoChain ( arg0) => Self :: MemoChain ( arg0. clone ( ) ) ,
277
- Self :: Derived ( arg0) => Self :: Derived ( arg0. clone ( ) ) ,
278
+ // Self::Derived(arg0) => Self::Derived(arg0.clone()),
278
279
}
279
280
}
280
281
}
281
282
283
+ impl < T : PartialEq + Copy + ' static > Copy for MaybeReactive < T > { }
284
+
282
285
macro_rules! impl_inert_into_maybe_reactive {
283
286
( $( $ty: ty) ,* $( , ) ?) => {
284
287
$(
@@ -368,10 +371,10 @@ impl<T: PartialEq + Clone> IntoMemo<T> for MaybeReactive<T> {
368
371
MaybeReactive :: Signal ( signal) => signal. memo ( ) ,
369
372
MaybeReactive :: Memo ( memo) => memo,
370
373
MaybeReactive :: MemoChain ( memo_chain) => memo_chain. memo ( ) ,
371
- MaybeReactive :: Derived ( derived) => {
372
- let derived = Rc :: clone ( & derived) ;
373
- create_memo ( move |_| derived. borrow_mut ( ) ( ) )
374
- } ,
374
+ // MaybeReactive::Derived(derived) => {
375
+ // let derived = Rc::clone(&derived);
376
+ // create_memo(move |_| derived.borrow_mut()())
377
+ // },
375
378
}
376
379
}
377
380
}
@@ -380,7 +383,9 @@ impl<T: PartialEq + Clone> IntoMemo<T> for MaybeReactive<T> {
380
383
pub enum MaybeSignal < T : ' static > {
381
384
/// Option needed to deal with conversion from [`Inert`] into [`Signal`]
382
385
/// Optimize: Can be replaced with MaybeUninit for performance
386
+ #[ non_exhaustive]
383
387
Inert ( Option < T > ) ,
388
+ #[ non_exhaustive]
384
389
Signal ( Signal < T > ) ,
385
390
}
386
391
@@ -413,10 +418,34 @@ impl<T: 'static> IntoSignal<T> for MaybeSignal<T> {
413
418
}
414
419
415
420
impl < T : ' static > MaybeSignal < T > {
421
+ /// Creates new inert MaybeSignal
416
422
pub fn new_inert ( value : T ) -> Self {
417
423
Self :: Inert ( Some ( value) )
418
424
}
419
425
426
+ pub fn as_inert ( & self ) -> Option < & T > {
427
+ match self {
428
+ // Note: Option here is for lazy initialization, so unwrap is right
429
+ MaybeSignal :: Inert ( inert) => Some ( inert. as_ref ( ) . unwrap ( ) ) ,
430
+ MaybeSignal :: Signal ( _) => None ,
431
+ }
432
+ }
433
+
434
+ pub fn as_inert_mut ( & mut self ) -> Option < & mut T > {
435
+ match self {
436
+ // Note: Option here is for lazy initialization, so unwrap is right
437
+ MaybeSignal :: Inert ( inert) => Some ( inert. as_mut ( ) . unwrap ( ) ) ,
438
+ MaybeSignal :: Signal ( _) => None ,
439
+ }
440
+ }
441
+
442
+ pub fn as_signal ( & self ) -> Option < Signal < T > > {
443
+ match self {
444
+ MaybeSignal :: Signal ( signal) => Some ( * signal) ,
445
+ _ => None ,
446
+ }
447
+ }
448
+
420
449
#[ track_caller]
421
450
fn now_reactive ( & mut self ) -> Signal < T > {
422
451
match self {
@@ -509,11 +538,11 @@ impl<T: 'static, U: PartialEq + 'static> SignalSetter<T, MaybeReactive<U>>
509
538
MaybeReactive :: MemoChain ( memo_chain) => {
510
539
self . now_reactive ( ) . setter ( memo_chain, set_map)
511
540
} ,
512
- MaybeReactive :: Derived ( derived) => {
513
- // TODO: use_effect or not to use effect? See [`Signal: SignalSetter<T, MaybeReactive<U>>`] case for Derived
514
- let derived = Rc :: clone ( & derived) ;
515
- self . update ( |this| set_map ( this, & derived. borrow_mut ( ) ( ) ) )
516
- } ,
541
+ // MaybeReactive::Derived(derived) => {
542
+ // // TODO: use_effect or not to use effect? See [`Signal: SignalSetter<T, MaybeReactive<U>>`] case for Derived
543
+ // let derived = Rc::clone(&derived);
544
+ // self.update(|this| set_map(this, &derived.borrow_mut()()))
545
+ // },
517
546
}
518
547
}
519
548
}
@@ -670,8 +699,8 @@ mod tests {
670
699
// Inert<()>
671
700
// Inert values need explicit conversion into Inert wrapper
672
701
accept_maybe_reactive ( ( ) . inert ( ) ) ;
673
- // Derived signal
674
- accept_maybe_reactive ( || { } ) ;
702
+ // // Derived signal
703
+ // accept_maybe_reactive(|| {});
675
704
// Memo<()>
676
705
accept_maybe_reactive ( create_memo ( move |_| { } ) ) ;
677
706
// Signal<()>
0 commit comments