miniserde_enum/
lib.rs

1extern crate proc_macro;
2
3pub(crate) mod attr;
4mod bound;
5mod de;
6mod ser;
7
8use std::convert::From;
9use syn::{parse_macro_input, Data, DeriveInput, Error};
10
11#[derive(Debug)]
12enum TagType {
13    External,
14    Internal(String),
15    Untagged,
16    Adjacent { tag: String, content: String },
17}
18
19#[proc_macro_derive(Serialize_enum, attributes(serde))]
20pub fn derive_serialize(tokens: proc_macro::TokenStream) -> proc_macro::TokenStream {
21    let input = parse_macro_input!(tokens as DeriveInput);
22    let en = match &input.data {
23        Data::Enum(en) => en,
24        _ => {
25            return Error::new_spanned(input, "Serialize_enum can only be applied to enums")
26                .to_compile_error()
27                .into()
28        }
29    };
30    ser::derive(&input, &en)
31        .unwrap_or_else(|err| err.to_compile_error())
32        .into()
33}
34
35#[proc_macro_derive(Deserialize_enum, attributes(serde))]
36pub fn derive_deserialize(tokens: proc_macro::TokenStream) -> proc_macro::TokenStream {
37    let input = parse_macro_input!(tokens as DeriveInput);
38    let en = match &input.data {
39        Data::Enum(en) => en,
40        _ => {
41            return Error::new_spanned(input, "Serialize_enum can only be applied to enums")
42                .to_compile_error()
43                .into()
44        }
45    };
46    de::derive(&input, &en)
47        .unwrap_or_else(|err| err.to_compile_error())
48        .into()
49}