#[doc(hidden)]
pub enum Return<T> {
Actual(T),
Continue,
Break,
}
#[macro_export]
macro_rules! async_ltry {
($rty:ty, $ety:ty | $mblk:block catch($ename:ident) $cblk:block) => {{
let result: Result<$crate::Return<$rty>, $ety> = (|| async { Ok($crate::Return::Actual($mblk)) })().await;
match result {
Ok($crate::Return::Actual(x)) => x,
Ok($crate::Return::Continue) => continue,
Ok($crate::Return::Break) => break,
Err($ename) => $cblk,
}
}};
(move $rty:ty, $ety:ty | $mblk:block catch($ename:ident) $cblk:block) => {{
let result: Result<$crate::Return<$rty>, $ety> =
(move || async { Ok($crate::Return::Actual($mblk)) })().await;
match result {
Ok($crate::Return::Actual(x)) => x,
Ok($crate::Return::Continue) => continue,
Ok($crate::Return::Break) => break,
Err($ename) => $cblk,
}
}};
}
#[macro_export]
macro_rules! async_try {
($rty:ty, $ety:ty | $mblk:block catch($ename:ident) $cblk:block) => {{
let result: Result<$rty, $ety> = (|| async { Ok($mblk) })().await;
match result {
Ok(x) => x,
Err($ename) => $cblk,
}
}};
(move $rty:ty, $ety:ty | $mblk:block catch($ename:ident) $cblk:block) => {{
let result: Result<$rty, $ety> = (move || async { Ok($mblk) })().await;
match result {
Ok(x) => x,
Err($ename) => $cblk,
}
}};
}
#[macro_export]
macro_rules! try_block {
($rty:ty, $ety:ty | $mblk:block catch($ename:ident) $cblk:block) => {{
let result: Result<$rty, $ety> = (|| Ok($mblk))();
match result {
Ok(x) => x,
Err($ename) => $cblk,
}
}};
(move $rty:ty, $ety:ty | $mblk:block catch($ename:ident) $cblk:block) => {{
let result: Result<$rty, $ety> = (move || Ok($mblk))();
match result {
Ok(x) => x,
Err($ename) => $cblk,
}
}};
}
#[macro_export]
macro_rules! cont {
() => {
return Ok($crate::Return::Continue);
};
}
#[macro_export]
macro_rules! brk {
() => {
return Ok($crate::Return::Break);
};
}