use proc_macro2::TokenStream;
use quote::quote;
use syn::{
DeriveInput, LitStr, Result,
parse::{Parse, ParseStream},
};
#[derive(Debug, PartialEq)]
pub(crate) enum Args {
Yes,
No,
SeeIndividualProperties,
Unknown,
}
impl Parse for Args {
fn parse(input: ParseStream) -> Result<Self> {
match input.parse::<LitStr>()?.value().as_str() {
"yes" => Ok(Self::Yes),
"see individual properties" | "invidual properties" => Ok(Self::SeeIndividualProperties),
"no" => Ok(Self::No),
s => {
dbg!(format!(
"WARNING:: inherited value {} not recognised. Property will need to impl StyleValue trait manually.",
s
));
Ok(Self::Unknown)
}
}
}
}
pub fn generate(args: Args, ast: DeriveInput) -> TokenStream {
let ident = &ast.ident;
let generics = &ast.generics;
let bool = args == Args::Yes;
quote! {
#ast
#[automatically_derived]
impl #generics StyleValue for #ident #generics {
fn inherits() -> bool {
#bool
}
}
}
}