1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
extern crate proc_macro;
extern crate proc_macro2;
extern crate quote;

mod builder;
mod otto_vec;
mod util;

use crate::builder::impl_derive_macro;
use crate::otto_vec::impl_otto_vec_macro;

#[proc_macro_attribute]
pub fn otto_vec(
    _attr: proc_macro::TokenStream,
    item: proc_macro::TokenStream,
) -> proc_macro::TokenStream {
    let ast = syn::parse_macro_input!(item as syn::ItemFn);
    impl_otto_vec_macro(ast)
}

#[proc_macro_derive(Builder, attributes(builder))]
pub fn derive_builder(tokens: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let ast = syn::parse_macro_input!(tokens as syn::DeriveInput);
    impl_derive_macro(ast)
}