shiv_macro_impl/
lib.rs

1pub mod bundle;
2pub mod component;
3pub mod label;
4pub mod system_param;
5pub use syn;
6
7#[macro_export]
8macro_rules! implement {
9    ($path:expr) => {
10        #[proc_macro_derive(SystemParam)]
11        pub fn derive_system_param(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
12            let input = $crate::syn::parse_macro_input!(input as $crate::syn::DeriveInput);
13            ::std::convert::From::from($crate::system_param::derive_system_param(input, $path))
14        }
15
16        #[proc_macro_derive(Component)]
17        pub fn derive_component(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
18            let input = $crate::syn::parse_macro_input!(input as $crate::syn::DeriveInput);
19            ::std::convert::From::from($crate::component::derive_component(input, $path))
20        }
21
22        #[proc_macro_derive(Bundle)]
23        pub fn derive_bundle(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
24            let input = $crate::syn::parse_macro_input!(input as $crate::syn::DeriveInput);
25            ::std::convert::From::from($crate::bundle::derive_bundle(input, $path))
26        }
27
28        #[proc_macro_derive(StageLabel)]
29        pub fn derive_stage_label(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
30            let input = $crate::syn::parse_macro_input!(input as $crate::syn::DeriveInput);
31            ::std::convert::From::from($crate::label::derive_label(input, $path, "StageLabel"))
32        }
33
34        #[proc_macro_derive(SystemLabel)]
35        pub fn derive_system_label(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
36            let input = $crate::syn::parse_macro_input!(input as $crate::syn::DeriveInput);
37            ::std::convert::From::from($crate::label::derive_label(input, $path, "SystemLabel"))
38        }
39    };
40}