Get rid of `MaybeEmpty`
While we can't easily have an empty `Punctuated` with static storage,
since `punctuated::Iter` is just `slice::Iter`, we can absolutely create
an empty one of those.
diff --git a/src/derive.rs b/src/derive.rs
index 2705737..1fb0e8f 100644
--- a/src/derive.rs
+++ b/src/derive.rs
@@ -77,40 +77,24 @@
impl Fields {
/// Returns an iterator over the fields
- pub fn iter(&self) -> MaybeEmpty<Iter<Field, Token![,]>> {
+ pub fn iter(&self) -> Iter<Field, Token![,]> {
match *self {
- Fields::Unit => MaybeEmpty::None,
- Fields::Named(FieldsNamed { ref named, .. }) => MaybeEmpty::Some(named.iter()),
- Fields::Unnamed(FieldsUnnamed { ref unnamed, .. }) => MaybeEmpty::Some(unnamed.iter()),
+ Fields::Unit => Iter::empty(),
+ Fields::Named(FieldsNamed { ref named, .. }) => named.iter(),
+ Fields::Unnamed(FieldsUnnamed { ref unnamed, .. }) => unnamed.iter(),
}
}
}
impl<'a> IntoIterator for &'a Fields {
type Item = &'a Field;
- type IntoIter = MaybeEmpty<Iter<'a, Field, Token![,]>>;
+ type IntoIter = Iter<'a, Field, Token![,]>;
fn into_iter(self) -> Self::IntoIter {
self.iter()
}
}
-pub enum MaybeEmpty<T> {
- Some(T),
- None,
-}
-
-impl<T: Iterator> Iterator for MaybeEmpty<T> {
- type Item = T::Item;
-
- fn next(&mut self) -> Option<Self::Item> {
- match *self {
- MaybeEmpty::Some(ref mut x) => x.next(),
- MaybeEmpty::None => None,
- }
- }
-}
-
#[cfg(feature = "parsing")]
pub mod parsing {
use super::*;