hecs_component_provider_macros/
lib.rs

1use proc_macro::TokenStream;
2use syn::{parse_macro_input, DeriveInput, ItemTrait};
3
4mod component_provider;
5mod default_trait_impl;
6mod self_component_provider;
7
8#[proc_macro_derive(ComponentProvider)]
9pub fn component_provider_derive(input: TokenStream) -> TokenStream {
10    let input = parse_macro_input!(input as DeriveInput);
11
12    match component_provider::derive(input) {
13        Ok(ts) => ts,
14        Err(e) => e.to_compile_error(),
15    }
16    .into()
17}
18
19#[proc_macro_derive(SelfComponentProvider)]
20pub fn self_component_provider_derive(input: TokenStream) -> TokenStream {
21    let input = parse_macro_input!(input as DeriveInput);
22
23    match self_component_provider::derive(input) {
24        Ok(ts) => ts,
25        Err(e) => e.to_compile_error(),
26    }
27    .into()
28}
29
30#[proc_macro_attribute]
31pub fn default_trait_impl(_attr: TokenStream, input: TokenStream) -> TokenStream {
32    let input = parse_macro_input!(input as ItemTrait);
33
34    match default_trait_impl::generate(input) {
35        Ok(ts) => ts,
36        Err(e) => e.to_compile_error(),
37    }
38    .into()
39}