use syn::parse::{Parse, ParseStream};
use syn::{Ident, LitStr};
#[derive(Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct DisplayAttr {
pub format: Option<Ident>,
}
impl DisplayAttr {
pub fn parse_nested(meta: &syn::meta::ParseNestedMeta<'_>) -> syn::Result<Self> {
let content: syn::parse::ParseBuffer<'_>;
syn::parenthesized!(content in meta.input);
let format = content.parse::<Ident>();
let parsed = DisplayAttr {
format: format.ok(),
};
Ok(parsed)
}
}
#[allow(dead_code)]
pub enum DisplayMeta {
Format(LitStr),
}
impl Parse for DisplayMeta {
fn parse(input: ParseStream) -> syn::Result<Self> {
let ident: Ident = input.parse()?;
if ident == "format" {
dbg!("found format attribute key");
input.parse::<syn::Token![=]>()?;
let lit: LitStr = input.parse()?;
return Ok(Self::Format(lit));
}
Err(syn::Error::new_spanned(ident, "unknown field"))
}
}