use leptos::{MaybeSignal, Signal, SignalGet, SignalWith, StoredValue}; #[derive(Clone)] pub enum StoredMaybeSignal where T: 'static, { StoredValue(StoredValue), Signal(Signal), } impl Copy for StoredMaybeSignal {} impl SignalGet for StoredMaybeSignal { type Value = T; fn get(&self) -> Self::Value { match self { StoredMaybeSignal::StoredValue(value) => value.get_value(), StoredMaybeSignal::Signal(signal) => signal.get(), } } fn try_get(&self) -> Option { match self { StoredMaybeSignal::StoredValue(value) => value.try_get_value(), StoredMaybeSignal::Signal(signal) => signal.try_get(), } } } impl SignalWith for StoredMaybeSignal { type Value = T; fn with(&self, f: impl FnOnce(&Self::Value) -> O) -> O { match self { StoredMaybeSignal::StoredValue(value) => value.with_value(f), StoredMaybeSignal::Signal(signal) => signal.with(f), } } fn try_with(&self, f: impl FnOnce(&Self::Value) -> O) -> Option { match self { StoredMaybeSignal::StoredValue(value) => value.try_with_value(f), StoredMaybeSignal::Signal(signal) => signal.try_with(f), } } } impl From> for StoredMaybeSignal { fn from(value: MaybeSignal) -> Self { match value { MaybeSignal::Static(value) => Self::StoredValue(StoredValue::new(value)), MaybeSignal::Dynamic(signal) => Self::Signal(signal), } } }