1mod cmp;
2mod config;
3mod generate;
4mod syntax;
5mod utils;
6mod ops;
7
8use crate::generate::RichStructContent;
9use proc_macro::TokenStream;
10use syn::parse_macro_input;
11
12
13#[proc_macro_derive(DataStruct, attributes(dstruct, dfield))]
14pub fn datastruct(input: TokenStream) -> TokenStream {
15 let parsed = parse_macro_input!(input with syntax::RichStruct::parse_struct);
16 let expanded = match RichStructContent::from_syntax(parsed) {
17 Err(e) => e.to_compile_error(),
18 Ok(content) => content
19 .to_impl()
20 .unwrap_or_else(syn::Error::into_compile_error),
21 };
22
23 expanded.into()
24}