1#![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}