Skip to main content

seam_macros/
lib.rs

1/* src/server/core/rust-macros/src/lib.rs */
2#![cfg_attr(test, allow(clippy::unwrap_used))]
3
4mod seam_command;
5mod seam_procedure;
6mod seam_subscription;
7mod seam_type;
8
9use proc_macro::TokenStream;
10
11#[proc_macro_derive(SeamType, attributes(seam))]
12pub fn derive_seam_type(input: TokenStream) -> TokenStream {
13  let input = syn::parse_macro_input!(input as syn::DeriveInput);
14  match seam_type::expand(&input) {
15    Ok(tokens) => tokens.into(),
16    Err(e) => e.to_compile_error().into(),
17  }
18}
19
20#[proc_macro_attribute]
21pub fn seam_procedure(attr: TokenStream, item: TokenStream) -> TokenStream {
22  let attr = proc_macro2::TokenStream::from(attr);
23  let item = syn::parse_macro_input!(item as syn::ItemFn);
24  match seam_procedure::expand(attr, item) {
25    Ok(tokens) => tokens.into(),
26    Err(e) => e.to_compile_error().into(),
27  }
28}
29
30#[proc_macro_attribute]
31pub fn seam_command(attr: TokenStream, item: TokenStream) -> TokenStream {
32  let attr = proc_macro2::TokenStream::from(attr);
33  let item = syn::parse_macro_input!(item as syn::ItemFn);
34  match seam_command::expand(attr, item) {
35    Ok(tokens) => tokens.into(),
36    Err(e) => e.to_compile_error().into(),
37  }
38}
39
40#[proc_macro_attribute]
41pub fn seam_subscription(attr: TokenStream, item: TokenStream) -> TokenStream {
42  let attr = proc_macro2::TokenStream::from(attr);
43  let item = syn::parse_macro_input!(item as syn::ItemFn);
44  match seam_subscription::expand(attr, item) {
45    Ok(tokens) => tokens.into(),
46    Err(e) => e.to_compile_error().into(),
47  }
48}