linked_data_derive/
lib.rs

1//! This library defines the derive macros for the `linked_data` library. It is
2//! not meant to be used directly. It is reexported by the `linked_data`
3//! library.
4use 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}