use super::*;
impl<T: Clone + PartialEq + 'static> SuspenseHandle<T> {
pub fn new() -> Self {
Self {
phase: Signal::create(SuspensePhase::Pending),
}
}
pub fn resolve_sync(&self, value: T) {
self.get_phase().set(SuspensePhase::Resolved(value));
}
pub fn fail(&self, message: String) {
self.get_phase().set(SuspensePhase::Failed(message));
}
pub fn reset(&self) {
self.get_phase().set(SuspensePhase::Pending);
}
}
impl<T: Clone + PartialEq + 'static> Default for SuspenseHandle<T> {
fn default() -> Self {
Self::new()
}
}
impl<T: Clone + PartialEq + Debug + 'static> Display for SuspenseHandle<T> {
fn fmt(&self, formatter: &mut Formatter<'_>) -> FmtResult {
write!(formatter, "SuspenseHandle({:?})", self.get_phase().get())
}
}
impl<T: PartialEq> PartialEq for SuspensePhase<T> {
fn eq(&self, other: &Self) -> bool {
match (self, other) {
(SuspensePhase::Pending, SuspensePhase::Pending) => true,
(SuspensePhase::Resolved(a), SuspensePhase::Resolved(b)) => a == b,
(SuspensePhase::Failed(a), SuspensePhase::Failed(b)) => a == b,
_ => false,
}
}
}