1#![deny(unsafe_code)]
10
11extern crate proc_macro;
12
13mod derives;
14mod meta;
15pub(crate) mod util;
16
17use proc_macro::TokenStream;
18use syn::{parse_macro_input, DeriveInput};
19
20#[proc_macro_derive(Block, attributes(input, output, parameter, state))]
21pub fn derive_block(input: TokenStream) -> TokenStream {
22 let input: DeriveInput = parse_macro_input!(input);
23 derives::expand_derive_block(&input)
24 .unwrap_or_else(syn::Error::into_compile_error)
25 .into()
26}
27
28#[proc_macro_derive(FunctionBlock, attributes())]
29pub fn derive_function_block(input: TokenStream) -> TokenStream {
30 let input: DeriveInput = parse_macro_input!(input);
31 derives::expand_derive_function_block(&input)
32 .unwrap_or_else(syn::Error::into_compile_error)
33 .into()
34}
35
36#[proc_macro_derive(Subsystem, attributes(block))]
37pub fn derive_subsystem(input: TokenStream) -> TokenStream {
38 let input: DeriveInput = parse_macro_input!(input);
39 derives::expand_derive_system(&input)
40 .unwrap_or_else(syn::Error::into_compile_error)
41 .into()
42}
43
44#[proc_macro_derive(System, attributes(block))]
45pub fn derive_system(input: TokenStream) -> TokenStream {
46 let input: DeriveInput = parse_macro_input!(input);
47 derives::expand_derive_system(&input)
48 .unwrap_or_else(syn::Error::into_compile_error)
49 .into()
50}