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::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}