1#![warn(missing_docs)]
20#![doc(html_root_url = "https://docs.rs/xml-data-derive/0.0.1")]
21
22extern crate proc_macro;
23
24mod attributes;
25mod element;
26mod parser;
27mod serialize;
28
29use proc_macro::TokenStream;
30use syn::{parse_macro_input, DeriveInput};
31
32#[proc_macro_derive(Element, attributes(xml_data))]
34pub fn derive_element(input: TokenStream) -> TokenStream {
35 let input = parse_macro_input!(input as DeriveInput);
36
37 let meta = element::Meta::parse_meta(&input, true);
38
39 let mut output = serialize::build_serialize(&meta, true);
40 output.extend(parser::build_parser(&meta, true));
41
42 TokenStream::from(output)
43}
44
45#[proc_macro_derive(SerializerElement, attributes(xml_data))]
47pub fn derive_serializer_element(input: TokenStream) -> TokenStream {
48 let input = parse_macro_input!(input as DeriveInput);
49
50 let meta = element::Meta::parse_meta(&input, true);
51
52 let output = serialize::build_serialize(&meta, true);
53
54 TokenStream::from(output)
55}
56
57#[proc_macro_derive(ParserElement, attributes(xml_data))]
59pub fn derive_parser_element(input: TokenStream) -> TokenStream {
60 let input = parse_macro_input!(input as DeriveInput);
61
62 let meta = element::Meta::parse_meta(&input, true);
63
64 let output = parser::build_parser(&meta, true);
65
66 TokenStream::from(output)
67}
68
69#[proc_macro_derive(Inner, attributes(xml_data))]
71pub fn derive_inner(input: TokenStream) -> TokenStream {
72 let input = parse_macro_input!(input as DeriveInput);
73
74 let meta = element::Meta::parse_meta(&input, false);
75
76 let mut output = serialize::build_serialize(&meta, false);
77 output.extend(parser::build_parser(&meta, false));
78
79 TokenStream::from(output)
80}
81
82#[proc_macro_derive(SerializerInner, attributes(xml_data))]
84pub fn derive_serializer_inner(input: TokenStream) -> TokenStream {
85 let input = parse_macro_input!(input as DeriveInput);
86
87 let meta = element::Meta::parse_meta(&input, false);
88
89 let output = serialize::build_serialize(&meta, false);
90
91 TokenStream::from(output)
92}
93
94#[proc_macro_derive(ParserInner, attributes(xml_data))]
96pub fn derive_parser_inner(input: TokenStream) -> TokenStream {
97 let input = parse_macro_input!(input as DeriveInput);
98
99 let meta = element::Meta::parse_meta(&input, false);
100
101 let output = parser::build_parser(&meta, false);
102
103 TokenStream::from(output)
104}