aboutsummaryrefslogtreecommitdiff
path: root/src/decoder/mod.rs
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2015-12-18 16:29:07 -0800
committerAlex Crichton <alex@alexcrichton.com>2015-12-18 16:29:07 -0800
commit39d77b6d79dfbba6923f1529f63a3b6117bb6772 (patch)
tree45f35359823a1c55fbd88b0f6b5bc7945d906c2c /src/decoder/mod.rs
parent4987b47a92bc32aa579532959e80b45ae6e28da5 (diff)
downloadmilf-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.rs15
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(),
}
}