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::ExprInput);
10    quote! { #parsed }.into()
11}
12
13#[doc = include_str!("../docs/procedure.md")]
14#[proc_macro_attribute]
15pub fn procedure(attr: TokenStream, item: TokenStream) -> TokenStream {
16    match topcoat_runtime_grammar::procedure::Procedure::parse(attr.into(), item.into()) {
17        Ok(value) => quote! { #value }.into(),
18        Err(error) => error.to_compile_error().into(),
19    }
20}
21
22#[doc = include_str!("../docs/record.md")]
23#[proc_macro_attribute]
24pub fn record(attr: TokenStream, item: TokenStream) -> TokenStream {
25    match topcoat_runtime_grammar::record::Record::parse(attr.into(), item.into()) {
26        Ok(value) => quote! { #value }.into(),
27        Err(error) => error.to_compile_error().into(),
28    }
29}
30
31#[doc = include_str!("../docs/shard.md")]
32#[proc_macro_attribute]
33pub fn shard(attr: TokenStream, item: TokenStream) -> TokenStream {
34    match topcoat_runtime_grammar::shard::Shard::parse(attr.into(), item.into()) {
35        Ok(value) => quote! { #value }.into(),
36        Err(error) => error.to_compile_error().into(),
37    }
38}