1extern crate alloc;
2extern crate proc_macro;
3
4#[macro_use]
5mod shared;
6
7mod difference;
8use difference::derive_struct_diff_enum;
9
10use crate::difference::derive_struct_diff_struct;
11
12mod parse;
13
14#[proc_macro_derive(Difference, attributes(difference))]
16pub fn derive_struct_diff(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
17 let input = parse::parse_data(input);
18
19 let ts = match &input {
20 parse::Data::Struct(struct_) if struct_.named => derive_struct_diff_struct(struct_),
21 parse::Data::Enum(enum_) => derive_struct_diff_enum(enum_),
22 _ => unimplemented!("Only structs and enums are supported"),
23 };
24
25 ts
26}