topcoat_runtime_macro/
lib.rs1use 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}