use proc_macro::TokenStream;
use quote::quote;
use syn::{
Block, Expr, Token,
parse::{ParseStream, Result},
};
fn parse_warrant(input: ParseStream) -> Result<(Expr, Block)> {
let condition = input.parse()?;
input.parse::<Token![,]>()?;
input.parse::<Token![else]>()?;
let else_block: Block = input.parse()?;
Ok((condition, else_block))
}
#[proc_macro]
pub fn warrant(input: TokenStream) -> TokenStream {
let (condition, else_block) = syn::parse_macro_input!(input with parse_warrant);
let expanded = quote! {
if #condition {
} else {
#else_block
}
};
TokenStream::from(expanded)
}
#[proc_macro]
pub fn guard(input: TokenStream) -> TokenStream {
warrant(input)
}