use leptos::*; use std::ops::Deref; pub struct OptionalMaybeSignal(MaybeSignal>); impl Default for OptionalMaybeSignal { fn default() -> Self { Self(MaybeSignal::Static(None)) } } impl Copy for OptionalMaybeSignal {} impl Clone for OptionalMaybeSignal { fn clone(&self) -> Self { Self(self.0.clone()) } } impl Deref for OptionalMaybeSignal { type Target = MaybeSignal>; fn deref(&self) -> &Self::Target { &self.0 } } impl From for OptionalMaybeSignal { fn from(value: T) -> Self { Self(MaybeSignal::Static(Some(value))) } } impl From> for OptionalMaybeSignal { fn from(value: Option) -> Self { Self(MaybeSignal::Static(value)) } } impl From>> for OptionalMaybeSignal { fn from(value: ReadSignal>) -> Self { Self(MaybeSignal::Dynamic(value.into())) } } impl From>> for OptionalMaybeSignal { fn from(value: RwSignal>) -> Self { Self(MaybeSignal::Dynamic(value.into())) } } impl From>> for OptionalMaybeSignal { fn from(value: Memo>) -> Self { Self(MaybeSignal::Dynamic(value.into())) } } impl From>> for OptionalMaybeSignal { fn from(value: Signal>) -> Self { Self(MaybeSignal::Dynamic(value)) } } impl From>> for OptionalMaybeSignal { fn from(value: MaybeSignal>) -> Self { Self(value) } } #[cfg(test)] mod test { use super::OptionalMaybeSignal; use leptos::{create_runtime, MaybeSignal}; #[test] fn into() { let runtime = create_runtime(); let _: MaybeSignal = 12.into(); let _: OptionalMaybeSignal = Some(12).into(); let _: OptionalMaybeSignal = MaybeSignal::Static(Some(12)).into(); runtime.dispose(); } }