topcoat_runtime_macro/
lib.rs1#![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}