use syn::{
parse::{Parse, ParseStream},
Ident, Token,
};
pub struct MetaNameValue {
pub name: Ident,
pub value: Ident,
}
pub enum Meta {
Word(Ident),
NameValue(MetaNameValue),
}
impl Meta {
pub fn from_attribute(attr: &syn::Attribute) -> syn::Result<Option<Self>> {
if attr.path.is_ident("ruma_api") {
attr.parse_args().map(Some)
} else {
Ok(None)
}
}
}
impl Parse for Meta {
fn parse(input: ParseStream) -> syn::Result<Self> {
let ident = input.parse()?;
if input.peek(Token![=]) {
let _ = input.parse::<Token![=]>();
Ok(Meta::NameValue(MetaNameValue { name: ident, value: input.parse()? }))
} else {
Ok(Meta::Word(ident))
}
}
}