redify_macros/
lib.rs

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}