use std::iter::{IntoIterator, Iterator};
use proc_macro::TokenStream;
use proc_macro2::Span;
use quote::*;
use syn::*;
use syn::{
parse::{ParseBuffer, Parser},
punctuated::Punctuated,
spanned::Spanned,
};
#[proc_macro_attribute]
pub fn singleton(args: TokenStream, input: TokenStream) -> TokenStream {
let input_struct: ItemStruct = parse_macro_input!(input as ItemStruct);
let input_struct_ident = input_struct.ident.clone();
let dlrf_name = parse_macro_input!(args as LitStr).value();
TokenStream::from(quote! {
#input_struct
impl ::from_singleton::FromSingleton for #input_struct_ident {
fn name() -> ::std::borrow::Cow<'static, str> {
::std::borrow::Cow::Borrowed(#dlrf_name)
}
}
})
}