Skip to content

Commit 20df7ef

Browse files
committed
Bugfix: count value-containing document nodes
During `enum` deserialization, we expect to find exactly one document node. The deserializer was erroneously counting both comment- and value- containing nodes. Signed-off-by: Chris Frantz <[email protected]>
1 parent 32aa332 commit 20df7ef

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/de.rs

+10-5
Original file line numberDiff line numberDiff line change
@@ -406,11 +406,16 @@ struct Enum<'de> {
406406

407407
impl<'de> Enum<'de> {
408408
fn new(ev: &'de [Document]) -> Result<Self> {
409-
let (e, v) = match ev.len() {
410-
0 => Err(Error::StructureError("one value", "none")),
411-
1 => ev[0].as_kv(),
412-
_ => Err(Error::StructureError("one value", "many")),
413-
}?;
409+
// We expect only one document node will contain a value.
410+
// Filter out non-value-containing nodes and extract the value.
411+
let mut values = ev.iter().filter(|&e| Document::has_value(e));
412+
let ev = values
413+
.next()
414+
.ok_or_else(|| Error::StructureError("one value", "none"))?;
415+
if values.next().is_some() {
416+
return Err(Error::StructureError("one value", "many"));
417+
}
418+
let (e, v) = ev.as_kv()?;
414419
Ok(Enum { enm: e, var: v })
415420
}
416421
}

0 commit comments

Comments
 (0)