diff --git a/macros/src/declare.rs b/macros/src/declare.rs index db91819..99dd13b 100644 --- a/macros/src/declare.rs +++ b/macros/src/declare.rs @@ -69,6 +69,7 @@ impl Declare { stream.extend(self.impl_element()); stream.extend(self.impl_marker_traits()); stream.extend(self.impl_display()); + stream.extend(self.impl_into_iter()); stream } @@ -263,6 +264,27 @@ impl Declare { body } + fn impl_into_iter(&self) -> TokenStream { + let elem_name = self.elem_name(); + quote!( + impl IntoIterator for #elem_name where T: ::OutputType { + type Item = #elem_name; + type IntoIter = std::vec::IntoIter<#elem_name>; + fn into_iter(self) -> Self::IntoIter { + vec![self].into_iter() + } + } + + impl IntoIterator for Box<#elem_name> where T: ::OutputType { + type Item = Box<#elem_name>; + type IntoIter = std::vec::IntoIter>>; + fn into_iter(self) -> Self::IntoIter { + vec![self].into_iter() + } + } + ) + } + fn impl_display(&self) -> TokenStream { let elem_name = self.elem_name(); let name: TokenTree = Literal::string(&self.name.to_string()).into();