1extern crate proc_macro;
4
5#[macro_use]
6mod syn_utils;
7mod parse;
8mod struct_meta;
9mod to_tokens;
10mod to_tokens_attribute;
11
12use syn::{parse_macro_input, DeriveInput};
13use syn_utils::*;
14
15#[proc_macro_derive(ToTokens, attributes(to_tokens))]
16pub fn derive_to_tokens(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
17 let input = parse_macro_input!(input as DeriveInput);
18 into_macro_output(to_tokens::derive_to_tokens(input))
19}
20
21#[proc_macro_derive(Parse, attributes(to_tokens, parse))]
22pub fn derive_parse(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
23 let input = parse_macro_input!(input as DeriveInput);
24 into_macro_output(parse::derive_parse(input))
25}
26
27#[proc_macro_derive(StructMeta, attributes(struct_meta))]
28pub fn derive_struct_meta(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
29 let input = parse_macro_input!(input as DeriveInput);
30 into_macro_output(struct_meta::derive_struct_meta(input))
31}