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_stream;
7mod seam_subscription;
8mod seam_type;
9mod seam_upload;
10
11use proc_macro::TokenStream;
12
13#[proc_macro_derive(SeamType, attributes(seam))]
14pub fn derive_seam_type(input: TokenStream) -> TokenStream {
15	let input = syn::parse_macro_input!(input as syn::DeriveInput);
16	match seam_type::expand(&input) {
17		Ok(tokens) => tokens.into(),
18		Err(e) => e.to_compile_error().into(),
19	}
20}
21
22#[proc_macro_attribute]
23pub fn seam_procedure(attr: TokenStream, item: TokenStream) -> TokenStream {
24	let attr = proc_macro2::TokenStream::from(attr);
25	let item = syn::parse_macro_input!(item as syn::ItemFn);
26	match seam_procedure::expand(attr, item) {
27		Ok(tokens) => tokens.into(),
28		Err(e) => e.to_compile_error().into(),
29	}
30}
31
32#[proc_macro_attribute]
33pub fn seam_command(attr: TokenStream, item: TokenStream) -> TokenStream {
34	let attr = proc_macro2::TokenStream::from(attr);
35	let item = syn::parse_macro_input!(item as syn::ItemFn);
36	match seam_command::expand(attr, item) {
37		Ok(tokens) => tokens.into(),
38		Err(e) => e.to_compile_error().into(),
39	}
40}
41
42#[proc_macro_attribute]
43pub fn seam_subscription(attr: TokenStream, item: TokenStream) -> TokenStream {
44	let attr = proc_macro2::TokenStream::from(attr);
45	let item = syn::parse_macro_input!(item as syn::ItemFn);
46	match seam_subscription::expand(attr, item) {
47		Ok(tokens) => tokens.into(),
48		Err(e) => e.to_compile_error().into(),
49	}
50}
51
52#[proc_macro_attribute]
53pub fn seam_stream(attr: TokenStream, item: TokenStream) -> TokenStream {
54	let attr = proc_macro2::TokenStream::from(attr);
55	let item = syn::parse_macro_input!(item as syn::ItemFn);
56	match seam_stream::expand(attr, item) {
57		Ok(tokens) => tokens.into(),
58		Err(e) => e.to_compile_error().into(),
59	}
60}
61
62#[proc_macro_attribute]
63pub fn seam_upload(attr: TokenStream, item: TokenStream) -> TokenStream {
64	let attr = proc_macro2::TokenStream::from(attr);
65	let item = syn::parse_macro_input!(item as syn::ItemFn);
66	match seam_upload::expand(attr, item) {
67		Ok(tokens) => tokens.into(),
68		Err(e) => e.to_compile_error().into(),
69	}
70}