Skip to main content

seam_macros/
lib.rs

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