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 fields_attr;
31 pub mod parse_attr_tree;
32}
33
34#[proc_macro]
35pub fn init_struct(item: TokenStream) -> TokenStream {
36 r#impl::init_struct::main(item)
37}
38
39#[proc_macro_attribute]
40pub fn data(attr: TokenStream, item: TokenStream) -> TokenStream {
41 r#impl::data::main(attr, item).unwrap_or_else(|e| e)
42}
43
44#[proc_macro_attribute]
45pub fn key(attr: TokenStream, item: TokenStream) -> TokenStream {
46 r#impl::keyval::key(attr, item).unwrap_or_else(|e| e)
47}
48
49#[proc_macro_attribute]
50pub fn val(attr: TokenStream, item: TokenStream) -> TokenStream {
51 r#impl::keyval::val(attr, item).unwrap_or_else(|e| e)
52}
53
54#[proc_macro_attribute]
55pub fn default(attr: TokenStream, item: TokenStream) -> TokenStream {
56 r#impl::default::main(attr, item).unwrap_or_else(|e| e)
57}
58
59#[proc_macro_derive(ToPrev)]
60pub fn derive_to_prev(item: TokenStream) -> TokenStream {
61 r#impl::derive::to_prev(item).unwrap_or_else(|e| e)
62}
63
64#[proc_macro_derive(ToNext)]
65pub fn derive_to_next(item: TokenStream) -> TokenStream {
66 r#impl::derive::to_next(item).unwrap_or_else(|e| e)
67}
68
69#[cfg(feature = "rand")]
70#[proc_macro_derive(ToRandom)]
71pub fn derive_to_random(item: TokenStream) -> TokenStream {
72 r#impl::derive::to_random(item).unwrap_or_else(|e| e)
73}