use proc_macro::TokenStream;
use quote::quote;
use syn::{parse_macro_input, DeriveInput};
#[proc_macro_derive(AllowStep, attributes(from))]
pub fn derive_from_state(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
let name = &input.ident;
let attr = input.attrs.iter().find(|a| a.path().is_ident("from"));
if let Some(attr) = attr {
let meta = attr.parse_args::<syn::Ident>().unwrap();
if meta == "any" {
quote! {
impl ::hamon::builder::AnyStep for #name {}
}
} else {
quote! {
impl<T,#meta> ::hamon::builder::FromStep<::hamon::builder::GuardedStep<T,#meta>> for #name {}
}
}
} else {
quote! {} }
.into()
}