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}