serser_derive/
lib.rs

1use proc_macro::TokenStream;
2use syn::{parse_macro_input, DeriveInput};
3
4mod from;
5mod into;
6
7/// Provides the [IntoTokens] trait for a struct or enum. This is used
8/// to serialize Rust data structures.
9#[proc_macro_derive(IntoTokens)]
10pub fn derive_into_tokens(tokens: TokenStream) -> TokenStream {
11    let input = parse_macro_input!(tokens as DeriveInput);
12
13    match into::into_tokens(&input) {
14        Ok(output) => output,
15        Err(err) => err.into_compile_error().into(),
16    }
17}
18
19/// Provides the `FromTokenSink` trait for a struct or enum. This is
20/// used to deserialize into Rust data structures.
21///
22/// The [FromTokens] trait has a blanket implementation that uses
23/// `FromTokenSink`.
24#[proc_macro_derive(FromTokens)]
25pub fn derive_from_tokens(tokens: TokenStream) -> TokenStream {
26    let input = parse_macro_input!(tokens as DeriveInput);
27
28    match from::from_tokens(&input) {
29        Ok(output) => output,
30        Err(err) => err.into_compile_error().into(),
31    }
32}