macro_rules! function {
{
$vis:vis async fn $fn_name:ident(
$nvim:ident: $nvim_ty:ty,
$($arg:tt: $type:ty),*)
-> $result_ty:ident<() $(, $err_ty:tt)?>;
} => { ... };
{
$vis:vis async fn $fn_name:ident(
$nvim:ident: $nvim_ty:ty,
$($arg:tt: $type:tt),*)
-> $result_ty:ident<$ok_ty:tt $(, $err_ty:tt)?>;
} => { ... };
{
$(
$vis:vis async fn $fn_name:ident($($stuff:tt)*) -> $result_ty:ident<$ok_ty:tt $(, $err_ty:tt)?>;
)*
} => { ... };
}