1use pull::DerivePull;
2use push::DerivePush;
3
4use proc_macro::TokenStream;
5use syn::parse_macro_input;
6use syn::DeriveInput;
7use syn::Error;
8
9mod pull;
10mod push;
11
12#[proc_macro_derive(Push)]
13pub fn push(input_stream: TokenStream) -> TokenStream {
14 let input = parse_macro_input!(input_stream as DeriveInput);
15
16 match input.data {
17 syn::Data::Struct(ref data_struct) => data_struct.derive_push_trait(&input),
18 syn::Data::Enum(ref data_enum) => data_enum.derive_push_trait(&input),
19 syn::Data::Union(ref data_uniun) => Error::new(
20 data_uniun.union_token.span,
21 "The Push derive macro is not and will never be implemented for unions",
22 )
23 .into_compile_error()
24 .into(),
25 }
26}
27
28#[proc_macro_derive(Pull)]
29pub fn pull(input_stream: TokenStream) -> TokenStream {
30 let input = parse_macro_input!(input_stream as DeriveInput);
31
32 match input.data {
33 syn::Data::Struct(ref data_struct) => data_struct.derive_pull_trait(&input),
34 syn::Data::Enum(ref _data_enum) => todo!(),
35 syn::Data::Union(ref data_uniun) => Error::new(
36 data_uniun.union_token.span,
37 "The Pull derive macro is not and will never be implemented for unions",
38 )
39 .into_compile_error()
40 .into(),
41 }
42}