#[macro_use]
mod errors;
pub mod component;
mod resettable_delay;
use derive_more::with_trait::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::{ResettableDelayHandle, resettable_delay_for},
};
#[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())
}
#[cfg(not(target_family = "wasm"))]
#[must_use]
pub const fn str_eq(l: &str, r: &str) -> bool {
if l.len() != r.len() {
return false;
}
let (l, r) = (l.as_bytes(), r.as_bytes());
let mut i = 0;
while i < l.len() {
if l[i] != r[i] {
return false;
}
i += 1;
}
true
}