1mod 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}