Skip to main content

seam_macros/
lib.rs

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