use crate::attrs::gsw::{GetAttr, NestedAttrGSW};
use syn::Ident;
use syn::parse::{Parse, ParseStream};
impl NestedAttrGSW {
pub fn getter(format: Option<Ident>) -> Self {
NestedAttrGSW::Get(GetAttr {
format,
mutable: false,
})
}
pub fn parse_nested(meta: &syn::meta::ParseNestedMeta<'_>) -> syn::Result<Self> {
if meta.path.is_ident("inner") {
let attr = GetAttr::parse_nested(meta)?;
return Ok(Self::Get(attr));
}
Err(meta.error("unrecognized repr"))
}
}
impl Parse for NestedAttrGSW {
fn parse(input: ParseStream) -> syn::Result<Self> {
let ident: Ident = input.parse()?;
if ident == "inner" {
let content;
syn::parenthesized!(content in input);
let format = if content.is_empty() {
None
} else {
Some(content.parse::<Ident>()?)
};
Ok(NestedAttrGSW::getter(format))
} else {
Err(syn::Error::new_spanned(ident, "unknown attribute"))
}
}
}