1#![cfg_attr(docsrs, feature(doc_cfg))]
2#![warn(missing_docs)]
3#![doc = include_str!(concat!("../", std::env!("CARGO_PKG_README")))]
4mod attributes;
8mod derive_display;
9mod derive_from_str;
10
11#[proc_macro_derive(Display, attributes(display, strings))]
15pub fn derive_display(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
16 let mut input: syn::DeriveInput = syn::parse_macro_input!(input);
17
18 match input.data {
19 syn::Data::Enum(_) => derive_display::Generator::generate(&mut input),
20
21 _ => Err(syn::Error::new(input.ident.span(), "`Display`: not an enum")),
22 }
23 .unwrap_or_else(|e| e.to_compile_error())
24 .into()
25}
26
27#[proc_macro_derive(FromStr, attributes(from_str, strings))]
29pub fn derive_from_str(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
30 let mut input: syn::DeriveInput = syn::parse_macro_input!(input);
31
32 match input.data {
33 syn::Data::Enum(_) => derive_from_str::Generator::generate(&mut input),
34
35 _ => Err(syn::Error::new(input.ident.span(), "`FromStr`: not an enum")),
36 }
37 .unwrap_or_else(|e| e.to_compile_error())
38 .into()
39}