From ab62cd3b284af900c3c9771848596cf43ce40a8b Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Mon, 7 May 2018 10:46:54 -0700 Subject: [PATCH] Eliminate loop that does not loop --- serde/src/private/de.rs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/serde/src/private/de.rs b/serde/src/private/de.rs index 58972f88..feb45df5 100644 --- a/serde/src/private/de.rs +++ b/serde/src/private/de.rs @@ -2819,16 +2819,18 @@ where where T: DeserializeSeed<'de>, { - while let Some(item) = self.iter.next() { - // Do not take(), instead borrow this entry. The internally tagged - // enum does its own buffering so we can't tell whether this entry - // is going to be consumed. Borrowing here leaves the entry - // available for later flattened fields. - let (ref key, ref content) = *item.as_ref().unwrap(); - self.pending = Some(content); - return seed.deserialize(ContentRefDeserializer::new(key)).map(Some); + match self.iter.next() { + Some(item) => { + // Do not take(), instead borrow this entry. The internally tagged + // enum does its own buffering so we can't tell whether this entry + // is going to be consumed. Borrowing here leaves the entry + // available for later flattened fields. + let (ref key, ref content) = *item.as_ref().unwrap(); + self.pending = Some(content); + seed.deserialize(ContentRefDeserializer::new(key)).map(Some) + } + None => Ok(None), } - Ok(None) } fn next_value_seed(&mut self, seed: T) -> Result