use syn::__private::quote::quote;
use syn::__private::TokenStream2;
use syn::spanned::Spanned;
use crate::fns::html::{
tmp,
HTMLMacro,
HTMLMacroParserError,
HTMLMacroParserErrorKind,
Result,
};
impl HTMLMacro {
pub fn handle_for_let_attribute(
&self,
tag_name: &str,
tag_attrs: &[TokenStream2],
children: &[TokenStream2],
attr: &rstml::node::KeyedAttribute,
) -> Result<TokenStream2> {
let new_element = tmp::create_element(tag_name, tag_attrs, children);
let key = syn::Ident::new(&attr.key.to_string()[8..], attr.span());
let val = attr.value().ok_or_else(|| {
HTMLMacroParserError {
span: attr.span(),
kind: HTMLMacroParserErrorKind::AttributeValueIsRequired,
}
})?;
Ok(quote! {
Node::create_fragment(
#val.iter().map(|#key| #new_element).collect()
)
})
}
}