diff options
author | Alex Crichton <alex@alexcrichton.com> | 2015-12-18 16:29:07 -0800 |
---|---|---|
committer | Alex Crichton <alex@alexcrichton.com> | 2015-12-18 16:29:07 -0800 |
commit | 39d77b6d79dfbba6923f1529f63a3b6117bb6772 (patch) | |
tree | 45f35359823a1c55fbd88b0f6b5bc7945d906c2c /src/decoder/mod.rs | |
parent | 4987b47a92bc32aa579532959e80b45ae6e28da5 (diff) | |
download | milf-rs-39d77b6d79dfbba6923f1529f63a3b6117bb6772.tar.gz milf-rs-39d77b6d79dfbba6923f1529f63a3b6117bb6772.zip |
When decoding maps, leave fields that weren't processed
Fixes an XXX
Diffstat (limited to 'src/decoder/mod.rs')
-rw-r--r-- | src/decoder/mod.rs | 15 |
1 files changed, 13 insertions, 2 deletions
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<Value>, cur_field: Option<String>, + cur_map: Peekable<btree_map::IntoIter<String, Value>>, + 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<Value>, 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(), } } |