enum_to_string/
lib.rs

1use proc_macro;
2use syn;
3use quote::quote;
4
5use proc_macro::TokenStream;
6
7#[proc_macro_derive(ToJsonString)]
8pub fn derive_all_variants(input: TokenStream) -> TokenStream {
9    let syn_item: syn::DeriveInput = syn::parse(input).unwrap();
10    let enum_name = syn_item.ident;
11
12    let expanded = quote! {
13        impl std::fmt::Display for #enum_name {
14            fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
15                let encoded = serde_json::json!(self);
16                match encoded.as_str() {
17                    Some(ser) => write!(f, "{}", ser),
18                    None => write!(f, ""), 
19                }
20            } 
21        }
22    };
23    expanded.into()
24}