From 39d77b6d79dfbba6923f1529f63a3b6117bb6772 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Fri, 18 Dec 2015 16:29:07 -0800 Subject: When decoding maps, leave fields that weren't processed Fixes an XXX --- src/decoder/mod.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/decoder/mod.rs') diff --git a/src/decoder/mod.rs b/src/decoder/mod.rs index 62de223..50a781c 100644 --- a/src/decoder/mod.rs +++ b/src/decoder/mod.rs @@ -1,5 +1,7 @@ use std::error; use std::fmt; +use std::collections::{btree_map, BTreeMap}; +use std::iter::Peekable; use Value; use self::DecodeErrorKind::*; @@ -17,6 +19,8 @@ pub struct Decoder { /// whether fields were decoded or not. pub toml: Option, cur_field: Option, + cur_map: Peekable>, + leftover_map: ::Table, } /// Description for errors which can occur while decoding a type. @@ -105,7 +109,12 @@ impl Decoder { /// This decoder can be passed to the `Decodable` methods or driven /// manually. pub fn new(toml: Value) -> Decoder { - Decoder { toml: Some(toml), cur_field: None } + Decoder { + toml: Some(toml), + cur_field: None, + leftover_map: BTreeMap::new(), + cur_map: BTreeMap::new().into_iter().peekable(), + } } fn sub_decoder(&self, toml: Option, field: &str) -> Decoder { @@ -118,7 +127,9 @@ impl Decoder { None => Some(format!("{}", field)), Some(ref s) => Some(format!("{}.{}", s, field)) } - } + }, + leftover_map: BTreeMap::new(), + cur_map: BTreeMap::new().into_iter().peekable(), } } -- cgit v1.2.3