composint_macro/
lib.rs

1extern crate proc_macro;
2
3mod data;
4mod field;
5mod generate;
6mod sign;
7
8use proc_macro::TokenStream;
9use quote::quote;
10use syn::parse_macro_input;
11
12use data::Data;
13use generate::{generate_struct_definition, generate_struct_impl};
14
15#[proc_macro]
16pub fn composite_type(input: TokenStream) -> TokenStream {
17    let input = parse_macro_input!(input as Data);
18
19    let struct_definition = generate_struct_definition(&input);
20    let impl_definition = generate_struct_impl(&input);
21
22    let stream = quote! {
23        #struct_definition
24        #impl_definition
25    };
26
27    TokenStream::from(stream)
28}