Skip to main content

miniserde_derive_enum/
lib.rs

1//! [Miniserde](https://github.com/dtolnay/miniserde) derive macros that support `enum`s.
2//!
3//! Provides a minimal `Serialize_enum`, `Deserialize_enum` derive macros
4//! for `enum` support in Miniserde.
5//!
6//! # Example
7//! ```
8//! # use miniserde::{Serialize, Deserialize};
9//! use miniserde_derive_enum::{Serialize_enum, Deserialize_enum};
10//!
11//! pub fn main() {
12//!    #[derive(Serialize_enum, Deserialize_enum)]
13//!    enum E {
14//!        Unit,
15//!        Struct { a: u8, b: String, c: Box<E> },
16//!        Tuple(u8, String),
17//!    }
18//! }
19//! ```
20#![recursion_limit = "128"]
21
22extern crate proc_macro;
23
24mod de;
25mod ser;
26
27use proc_macro::TokenStream;
28use syn::{parse_macro_input, DeriveInput};
29
30#[proc_macro_derive(Serialize_enum, attributes(serde))]
31pub fn derive_serialize(input: TokenStream) -> TokenStream {
32    ser::derive(parse_macro_input!(input as DeriveInput))
33        .unwrap_or_else(|err| err.to_compile_error())
34        .into()
35}
36
37#[proc_macro_derive(Deserialize_enum, attributes(serde))]
38pub fn derive_deserialize(input: TokenStream) -> TokenStream {
39    de::derive(parse_macro_input!(input as DeriveInput))
40        .unwrap_or_else(|err| err.to_compile_error())
41        .into()
42}