quick_builder_derive/
lib.rs1use builder::make_builder;
2use detail::StructDeriveInput;
3use quote::quote;
4use syn::{parse_macro_input, DeriveInput};
5
6mod builder;
7mod detail;
8mod error;
9mod validation;
10
11macro_rules! try2 {
14 ($result:expr) => {
15 match $result {
16 Ok(payload) => payload,
17 Err(err) => {
18 return err.into();
19 }
20 }
21 };
22}
23
24#[proc_macro_derive(QuickBuilder, attributes(invariant))]
25pub fn quick_builder(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
26 let input: StructDeriveInput = try2!(parse_macro_input!(input as DeriveInput).try_into());
27
28 let builder = try2!(make_builder(&input));
29
30 quote! {
31 #builder
32 }
33 .into()
34}