data_classes_derive/
lib.rs

1use proc_macro::TokenStream;
2
3macro_rules! parse_macro_input {
4    ($ts:ident as $ty:ty) => {
5        match syn::parse::<$ty>($ts) {
6            Ok(data) => Ok(data),
7            Err(err) => Err(TokenStream::from(err.to_compile_error())),
8        }
9    };
10    ($ts:ident with $parser:path) => {
11        match syn::parse::Parser::parse($parser, $ts) {
12            Ok(data) => Ok(data),
13            Err(err) => Err(TokenStream::from(err.to_compile_error())),
14        }
15    };
16    ($ts:ident) => {
17        parse_macro_input!($ts as _)
18    };
19}
20
21mod r#impl {
22    pub mod data;
23    pub mod default;
24    pub mod derive;
25    pub mod init_struct;
26    pub mod keyval;
27}
28
29mod util {
30    pub mod data_helpers;
31    pub mod fields_attr;
32    pub mod parse_attr_tree;
33}
34
35#[proc_macro]
36pub fn init_struct(item: TokenStream) -> TokenStream {
37    r#impl::init_struct::main(item)
38}
39
40#[proc_macro_attribute]
41pub fn data(attr: TokenStream, item: TokenStream) -> TokenStream {
42    r#impl::data::main(attr, item).unwrap_or_else(|e| e)
43}
44
45#[proc_macro_attribute]
46pub fn key(attr: TokenStream, item: TokenStream) -> TokenStream {
47    r#impl::keyval::key(attr, item).unwrap_or_else(|e| e)
48}
49
50#[proc_macro_attribute]
51pub fn val(attr: TokenStream, item: TokenStream) -> TokenStream {
52    r#impl::keyval::val(attr, item).unwrap_or_else(|e| e)
53}
54
55#[proc_macro_attribute]
56pub fn default(attr: TokenStream, item: TokenStream) -> TokenStream {
57    r#impl::default::main(attr, item).unwrap_or_else(|e| e)
58}
59
60#[proc_macro_derive(ToPrev)]
61pub fn derive_to_prev(item: TokenStream) -> TokenStream {
62    r#impl::derive::to_prev(item).unwrap_or_else(|e| e)
63}
64
65#[proc_macro_derive(ToNext)]
66pub fn derive_to_next(item: TokenStream) -> TokenStream {
67    r#impl::derive::to_next(item).unwrap_or_else(|e| e)
68}
69
70#[cfg(feature = "rand")]
71#[proc_macro_derive(ToRandom)]
72pub fn derive_to_random(item: TokenStream) -> TokenStream {
73    r#impl::derive::to_random(item).unwrap_or_else(|e| e)
74}