mod arc_memo;
mod async_derived;
mod inner;
mod memo;
mod selector;
use crate::{
prelude::*,
signal::RwSignal,
wrappers::{
read::Signal,
write::{IntoSignalSetter, SignalSetter},
},
};
pub use arc_memo::*;
pub use async_derived::*;
pub use memo::*;
pub use selector::*;
#[track_caller]
pub fn create_slice<T, O, S>(
signal: RwSignal<T>,
getter: impl Fn(&T) -> O + Copy + Send + Sync + 'static,
setter: impl Fn(&mut T, S) + Copy + Send + Sync + 'static,
) -> (Signal<O>, SignalSetter<S>)
where
T: Send + Sync + 'static,
O: PartialEq + Send + Sync + 'static,
{
(
create_read_slice(signal, getter),
create_write_slice(signal, setter),
)
}
#[track_caller]
pub fn create_read_slice<T, O>(
signal: RwSignal<T>,
getter: impl Fn(&T) -> O + Copy + Send + Sync + 'static,
) -> Signal<O>
where
T: Send + Sync + 'static,
O: PartialEq + Send + Sync + 'static,
{
Memo::new(move |_| signal.with(getter)).into()
}
#[track_caller]
pub fn create_write_slice<T, O>(
signal: RwSignal<T>,
setter: impl Fn(&mut T, O) + Copy + Send + Sync + 'static,
) -> SignalSetter<O>
where
T: Send + Sync + 'static,
{
let setter = move |value| signal.update(|x| setter(x, value));
setter.into_signal_setter()
}
#[inline(always)]
#[track_caller]
#[deprecated = "This function is being removed to conform to Rust idioms. \
Please use `Memo::new()` instead."]
pub fn create_memo<T>(
fun: impl Fn(Option<&T>) -> T + Send + Sync + 'static,
) -> Memo<T>
where
T: PartialEq + Send + Sync + 'static,
{
Memo::new(fun)
}
#[inline(always)]
#[track_caller]
#[deprecated = "This function is being removed to conform to Rust idioms. \
Please use `Memo::new_owning()` instead."]
pub fn create_owning_memo<T>(
fun: impl Fn(Option<T>) -> (T, bool) + Send + Sync + 'static,
) -> Memo<T>
where
T: PartialEq + Send + Sync + 'static,
{
Memo::new_owning(fun)
}
#[inline(always)]
#[track_caller]
#[deprecated = "This function is being removed to conform to Rust idioms. \
Please use `Selector::new()` instead."]
pub fn create_selector<T>(
source: impl Fn() -> T + Clone + Send + Sync + 'static,
) -> Selector<T>
where
T: PartialEq + Eq + Send + Sync + Clone + std::hash::Hash + 'static,
{
Selector::new(source)
}
#[inline(always)]
#[track_caller]
#[deprecated = "This function is being removed to conform to Rust idioms. \
Please use `Selector::new_with_fn()` instead."]
pub fn create_selector_with_fn<T>(
source: impl Fn() -> T + Clone + Send + Sync + 'static,
f: impl Fn(&T, &T) -> bool + Send + Sync + Clone + 'static,
) -> Selector<T>
where
T: PartialEq + Eq + Send + Sync + Clone + std::hash::Hash + 'static,
{
Selector::new_with_fn(source, f)
}