1#![recursion_limit = "128"]
2#![allow(unused_imports)]
3
4extern crate proc_macro;
5
6use darling::{FromDeriveInput, FromField};
7use proc_macro2::TokenStream;
8use quote::quote;
9
10mod diff;
11mod has_id;
12
13#[proc_macro_derive(Diff, attributes(diff))]
14pub fn derive_diff(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
15 diff::derive(input.into()).into()
16}
17
18#[proc_macro_derive(HasId, attributes(has_id))]
19pub fn derive_has_id(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
20 let input: syn::DeriveInput = syn::parse_macro_input!(input);
21 match has_id::DeriveInput::from_derive_input(&input) {
22 Ok(input) => input.derive().into(),
23 Err(e) => e.write_errors().into(),
24 }
25}