use proc_macro2::TokenStream;
use syn::{
meta::{self, ParseNestedMeta},
parse::Parser,
Attribute, MetaList,
};
pub trait ParseMeta {
fn is_unit() -> bool;
fn parse_meta(&mut self, meta: ParseNestedMeta) -> syn::Result<()>;
fn parse_attr(&mut self, attr: &Attribute) -> syn::Result<()> {
if Self::is_unit() {
attr.meta.require_path_only().map(|_| ())
} else {
attr.parse_nested_meta(|meta| self.parse_meta(meta))
}
}
fn parse_meta_list(&mut self, meta_list: &MetaList) -> syn::Result<()> {
meta_list.parse_nested_meta(|meta| self.parse_meta(meta))
}
fn parse_tokens(&mut self, tokens: TokenStream) -> syn::Result<()> {
meta::parser(|meta| self.parse_meta(meta)).parse2(tokens)
}
}