okey/
lib.rs

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}