#[macro_use]
mod errors;
pub mod component;
mod resettable_delay;
use std::future::Future;
use derive_more::From;
use futures::future::{self, AbortHandle};
use medea_reactive::Guarded;
#[doc(inline)]
pub use self::{
component::{AsProtoState, Component, SynchronizableState, Updatable},
errors::{Caused, JsonParseError},
resettable_delay::{resettable_delay_for, ResettableDelayHandle},
};
#[derive(Debug, From)]
pub struct TaskHandle(AbortHandle);
impl Drop for TaskHandle {
fn drop(&mut self) {
self.0.abort();
}
}
macro_rules! upgrade_or_break {
($weak:tt) => {
if let Some(this) = $weak.upgrade() {
this
} else {
break;
}
};
}
pub fn transpose_guarded<T>(
val: Guarded<Option<T>>,
) -> impl Future<Output = Option<Guarded<T>>> {
future::ready(val.transpose())
}