1#[macro_export]
2macro_rules! okey {
3 (fn $($tokens:tt)*) => ($crate::okey!(
4 @parse_signature [fn] $($tokens)*
5 ););
6 (@parse_signature [$($sig:tt)*] -> Result<$ty:ty> {
7 $($body:tt)*
8 }) => ($crate::okey!(
9 @parse_body [$($sig)* -> ::std::result::Result<$ty, Box<dyn ::std::error::Error>>] [] $($body)*
10 ););
11 (@parse_signature [$($sig:tt)*] $tt:tt $($tail:tt)*) => ($crate::okey!(
12 @parse_signature [$($sig)* $tt] $($tail)*
13 ););
14 (@parse_body [$($sig:tt)*] [$($body:tt)*] return Err($expr:expr); $($tail:tt)*) => ($crate::okey!(
15 @parse_body [$($sig)*] [$($body)*
16 return ::std::result::Result::Err(($expr).into());
17 ] $($tail)*
18 ););
19 (@parse_body [$($sig:tt)*] [$($body:tt)*] return $expr:expr; $($tail:tt)*) => ($crate::okey!(
20 @parse_body [$($sig)*] [$($body)*
21 return ::std::result::Result::Ok($expr);
22 ] $($tail)*
23 ););
24 (@parse_body [$($sig:tt)*] [$($body:tt)*] $stmt:stmt; $($tail:tt)*) => ($crate::okey!(
25 @parse_body [$($sig)*] [$($body)* $stmt] $($tail)*
26 ););
27 (@parse_body [$($sig:tt)*] [$($body:tt)*]) => ($($sig)* {
28 $($body)*
29 });
30}