diff --git a/strum_macros/src/macros/enum_iter.rs b/strum_macros/src/macros/enum_iter.rs index afc6d8bb..a62bfd82 100644 --- a/strum_macros/src/macros/enum_iter.rs +++ b/strum_macros/src/macros/enum_iter.rs @@ -83,12 +83,14 @@ pub fn enum_iter_inner(ast: &syn::DeriveInput) -> TokenStream { #(#arms),* }; - self.idx += 1; + if self.idx < #variant_count { + self.idx += 1; + } output } fn size_hint(&self) -> (usize, Option) { - let t = #variant_count - self.idx; + let t = if self.idx >= #variant_count { 0 } else { #variant_count - self.idx }; (t, Some(t)) } } diff --git a/strum_tests/tests/enum_iter.rs b/strum_tests/tests/enum_iter.rs index e3cffa58..b0813ef9 100644 --- a/strum_tests/tests/enum_iter.rs +++ b/strum_tests/tests/enum_iter.rs @@ -63,6 +63,9 @@ fn len_test() { i.next(); assert_eq!(0, i.len()); + i.next(); + + assert_eq!(0, i.size_hint().1.unwrap()); } #[test]