diff --git a/Cargo.toml b/Cargo.toml index 2924b54..4daaeb2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "osui-element" -version = "0.1.13" +version = "0.1.14" edition = "2021" description = "The element attribute for defining elements in OSUI" license = "Apache-2.0" diff --git a/lib.rs b/lib.rs index 3d222c9..29e98bf 100644 --- a/lib.rs +++ b/lib.rs @@ -52,90 +52,31 @@ pub fn element(_args: TokenStream, input: TokenStream) -> TokenStream { } // Generate the impl block with generics if needed - let impl_block = if has_generics { - // Keep the struct's generics (if any) when implementing the trait - quote! { - impl<'a, T> ElementCore for #struct_name<'a, T> { - fn get_element_by_id(&mut self, id: &str) -> Option<&mut Element> { - if let Children::Children(children, _) = &mut self.children { - for elem in children { - if elem.get_id() == id { - return Some(elem); - } else if let Some(e) = elem.get_element_by_id(id) { - return Some(e); - } - } - } - None - } - - fn set_styling(&mut self, styling: &std::collections::HashMap) { - if let Some(style) = styling.get(&StyleName::Class(self.class.to_string())) { - self.style = style.clone(); - } else if let Some(style) = styling.get(&StyleName::Id(self.id.to_string())) { - self.style = style.clone(); - } else if let Some(style) = - styling.get(&StyleName::Component(stringify!(#struct_name).to_string())) - { - self.style = style.clone(); - } - if let Children::Children(children, _) = &mut self.children { - for child in children { - child.set_styling(styling); + let impl_block = quote! { + impl<'a> ElementCore for #struct_name<'a> { + fn get_element_by_id(&mut self, id: &str) -> Option<&mut Element> { + if let Children::Children(children, _) = &mut self.children { + for elem in children { + if elem.get_id() == id { + return Some(elem); + } else if let Some(e) = elem.get_element_by_id(id) { + return Some(e); } } } - - fn get_id(&self) -> String { - self.id.to_string() - } - - fn get_style(&self) -> &Style { - &self.style - } + None } - } - } else { - // If no generics, don't add a generic `T` to the trait implementation - quote! { - impl<'a> ElementCore for #struct_name<'a> { - fn get_element_by_id(&mut self, id: &str) -> Option<&mut Element> { - if let Children::Children(children, _) = &mut self.children { - for elem in children { - if elem.get_id() == id { - return Some(elem); - } else if let Some(e) = elem.get_element_by_id(id) { - return Some(e); - } - } - } - None - } - fn set_styling(&mut self, styling: &std::collections::HashMap) { - if let Some(style) = styling.get(&StyleName::Class(self.class.to_string())) { - self.style = style.clone(); - } else if let Some(style) = styling.get(&StyleName::Id(self.id.to_string())) { - self.style = style.clone(); - } else if let Some(style) = - styling.get(&StyleName::Component(stringify!(#struct_name).to_string())) - { - self.style = style.clone(); - } - if let Children::Children(children, _) = &mut self.children { - for child in children { - child.set_styling(styling); - } - } - } + fn get_id(&self) -> String { + self.id.to_string() + } - fn get_id(&self) -> String { - self.id.to_string() - } - - fn get_style(&self) -> &Style { - &self.style - } + fn get_class(&self) -> String { + self.class.to_string() + } + + fn get_style(&self) -> &Style { + &self.style } } }; @@ -158,21 +99,12 @@ pub fn elem_fn(_args: TokenStream, input: TokenStream) -> TokenStream { proc_macro2::Span::call_site(), ); - let elem_fn = if ast.generics.params.len() == 1 { - quote! { - pub fn #func_name<'a>() -> Box<#struct_name<'a>> { - Box::new(#struct_name::default()) - } - } - } else { - quote! { - pub fn #func_name<'a, T>() -> Box<#struct_name<'a, T>> { - Box::new(#struct_name::default()) - } + let elem_fn = quote! { + pub fn #func_name<'a>() -> Box<#struct_name<'a>> { + Box::new(#struct_name::default()) } }; - // Combine the struct and the generated function let expanded = quote! { #ast #elem_fn