data_classes_derive/
lib.rs1use 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}