Skip to main content

topcoat_runtime_macro/
lib.rs

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