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}