#[doc(hidden)]
pub use futures_util::{TryFutureExt as __TryFutureExt, join as __join, try_join as __try_join};
#[doc(hidden)]
pub use paste::paste as __paste;
#[doc(hidden)]
pub use tuplex::IntoArray as __IntoArray;
#[macro_export]
macro_rules! init {
() => {};
($($(#[$m:meta])* $name:ident : $t:ty = ($init:expr) $(=> { $($a:tt)* } )?),+$(,)?) => {
$(
#[allow(unused_mut)]
$(#[$m])*
let mut $name = $crate::Child::<$t>::init($init).await?;
$(#[$m])*
{
$(
$crate::__init_assign!($name, $($a)*);
)?
}
)*
};
}
#[macro_export]
#[doc(hidden)]
macro_rules! __init_assign {
($name:ident, ) => {};
($name:ident, $($(#[$m:meta])* $prop:ident : $value:expr),+$(,)?) => {
$(
$(#[$m])*
$crate::__paste! {
$name.[<set_ $prop>]($value)?;
}
)*
};
}
#[macro_export]
macro_rules! start {
($sender:expr, default: $noop:expr $(,)?) => {
let _sender = $sender;
let _default = $noop;
::core::future::pending().await
};
($sender:expr, default: $noop:expr, $($(#[$m:meta])* $w:expr => { $($t:tt)* }),+$(,)?) => {
#[allow(unreachable_code)]
$crate::__join!($(
$(#[$m])*
$w.start(
$sender,
$crate::__start_map!($($t)*),
|| $noop
),
)*).0
};
}
#[macro_export]
#[doc(hidden)]
macro_rules! __start_map {
() => {
|_| None
};
($f:expr) => { $f };
($($(#[$me:meta])* $e:pat => $m:expr),+$(,)?) => {
|e| match e {
$(
$(#[$me])*
$e => Some($m),
)*
_ => None,
}
}
}
#[macro_export]
macro_rules! update_children {
() => {
$crate::try_join_update!()
};
($c:expr) => {
$crate::try_join_update!($c.update())
};
($($c:expr),+$(,)?) => {
$crate::try_join_update!($($c.update()),+)
};
}
#[macro_export]
macro_rules! try_join_update {
() => {
Ok(false)
};
($e:expr) => {
Ok($e.await?)
};
($($e:expr),+$(,)?) => {
$crate::__try_join!($(
$crate::__TryFutureExt::map_err($e, std::convert::From::from),
)*).map(|res|{
$crate::__IntoArray::into_array(res)
.into_iter()
.any(|b| b)
})
};
}