Skip to main content

topcoat_runtime_macro/
lib.rs

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