use proc_macro::TokenStream;
use quote::quote;
#[proc_macro]
pub fn expr(tokens: TokenStream) -> TokenStream {
let parsed = syn::parse_macro_input!(tokens as topcoat_runtime_grammar::expr::Expr);
match parsed.expr_to_tokens() {
Ok(ts) => ts.into(),
Err(err) => err.to_compile_error().into(),
}
}
#[proc_macro_attribute]
pub fn procedure(attr: TokenStream, item: TokenStream) -> TokenStream {
match topcoat_runtime_grammar::procedure::Procedure::parse(attr.into(), item.into()) {
Ok(value) => quote! { #value }.into(),
Err(error) => error.to_compile_error().into(),
}
}
#[proc_macro_attribute]
pub fn shard(attr: TokenStream, item: TokenStream) -> TokenStream {
match topcoat_runtime_grammar::shard::Shard::parse(attr.into(), item.into()) {
Ok(value) => quote! { #value }.into(),
Err(error) => error.to_compile_error().into(),
}
}