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