ratatui-kit-macros 0.6.2

ratatui-kit macros
Documentation
use quote::{ToTokens, quote};
use syn::{ItemStruct, Result, parse::Parse};

use crate::utils::get_fields;

pub struct ParsedProps {
    pub def: ItemStruct,
}

impl Parse for ParsedProps {
    fn parse(input: syn::parse::ParseStream) -> Result<Self> {
        let input: ItemStruct = input.parse()?;
        let fields = get_fields(&input)?;

        for field in fields.iter() {
            if let Some(ident) = &field.ident
                && ident == "key"
            {
                return Err(syn::Error::new_spanned(
                    field,
                    "the `key` property name is reserved",
                ));
            }
        }

        Ok(Self { def: input })
    }
}

impl ToTokens for ParsedProps {
    fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
        let def = &self.def;
        let name = &def.ident;
        let (impl_generics, type_generics, where_clause) = def.generics.split_for_impl();

        tokens.extend(quote! {
            impl #impl_generics ::ratatui_kit::Props for #name #type_generics #where_clause {}
        });
    }
}