Skip to main content

topcoat_runtime_macro/
lib.rs

1use proc_macro::TokenStream;
2use quote::quote;
3
4#[proc_macro]
5pub fn expr(tokens: TokenStream) -> TokenStream {
6    let parsed = syn::parse_macro_input!(tokens as topcoat_runtime_grammar::expr::Expr);
7    match parsed.expr_to_tokens() {
8        Ok(ts) => ts.into(),
9        Err(err) => err.to_compile_error().into(),
10    }
11}
12
13#[proc_macro_attribute]
14pub fn procedure(attr: TokenStream, item: TokenStream) -> TokenStream {
15    match topcoat_runtime_grammar::procedure::Procedure::parse(attr.into(), item.into()) {
16        Ok(value) => quote! { #value }.into(),
17        Err(error) => error.to_compile_error().into(),
18    }
19}
20
21#[proc_macro_attribute]
22pub fn shard(attr: TokenStream, item: TokenStream) -> TokenStream {
23    match topcoat_runtime_grammar::shard::Shard::parse(attr.into(), item.into()) {
24        Ok(value) => quote! { #value }.into(),
25        Err(error) => error.to_compile_error().into(),
26    }
27}