reactive_graph/
into_reactive_value.rs1#[doc(hidden)]
2pub struct __IntoReactiveValueMarkerBaseCase;
3
4pub trait IntoReactiveValue<T, M> {
7 fn into_reactive_value(self) -> T;
9}
10
11impl<T, I> IntoReactiveValue<T, __IntoReactiveValueMarkerBaseCase> for I
13where
14 I: Into<T>,
15{
16 fn into_reactive_value(self) -> T {
17 self.into()
18 }
19}
20
21#[cfg(test)]
22mod tests {
23
24 use crate::{
25 into_reactive_value::IntoReactiveValue,
26 owner::{LocalStorage, Owner},
27 traits::GetUntracked,
28 wrappers::read::Signal,
29 };
30 use typed_builder::TypedBuilder;
31
32 #[test]
33 fn test_into_signal_compiles() {
34 let owner = Owner::new();
35 owner.set();
36
37 #[cfg(not(feature = "nightly"))]
38 let _: Signal<usize> = (|| 2).into_reactive_value();
39 let _: Signal<usize, LocalStorage> = 2.into_reactive_value();
40 #[cfg(not(feature = "nightly"))]
41 let _: Signal<usize, LocalStorage> = (|| 2).into_reactive_value();
42 let _: Signal<String> = "str".into_reactive_value();
43 let _: Signal<String, LocalStorage> = "str".into_reactive_value();
44
45 #[derive(TypedBuilder)]
46 struct Foo {
47 #[builder(setter(
48 fn transform<M>(value: impl IntoReactiveValue<Signal<usize>, M>) {
49 value.into_reactive_value()
50 }
51 ))]
52 sig: Signal<usize>,
53 }
54
55 assert_eq!(Foo::builder().sig(2).build().sig.get_untracked(), 2);
56 #[cfg(not(feature = "nightly"))]
57 assert_eq!(Foo::builder().sig(|| 2).build().sig.get_untracked(), 2);
58 assert_eq!(
59 Foo::builder()
60 .sig(Signal::stored(2))
61 .build()
62 .sig
63 .get_untracked(),
64 2
65 );
66 }
67}