structdiff_derive/
lib.rs

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/// Derive macro generating an impl of the trait `StructDiff`
15#[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}