linked_data_derive/
lib.rs1use proc_macro::TokenStream;
5use proc_macro_error::{abort, proc_macro_error};
6use syn::DeriveInput;
7
8mod generate;
9pub(crate) mod utils;
10
11#[proc_macro_derive(Serialize, attributes(ld))]
12#[proc_macro_error]
13pub fn derive_serialize(item: TokenStream) -> TokenStream {
14 let input = syn::parse_macro_input!(item as DeriveInput);
15 let mut output = proc_macro2::TokenStream::new();
16
17 match generate::ser::subject(input) {
18 Ok(tokens) => output.extend(tokens),
19 Err(e) => {
20 abort!(e.span(), e)
21 }
22 }
23
24 output.into()
25}
26
27#[proc_macro_derive(Deserialize, attributes(ld))]
28#[proc_macro_error]
29pub fn derive_deserialize(item: TokenStream) -> TokenStream {
30 let input = syn::parse_macro_input!(item as DeriveInput);
31 let mut output = proc_macro2::TokenStream::new();
32
33 match generate::de::subject(input) {
34 Ok(tokens) => output.extend(tokens),
35 Err(e) => {
36 abort!(e.span(), e)
37 }
38 }
39
40 output.into()
41}