aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2014-06-28 14:42:30 -0700
committerAlex Crichton <alex@alexcrichton.com>2014-06-28 14:42:30 -0700
commit6b4f33444ad55b8264cf5ddb70b0bcdff57d42df (patch)
treebe2c3f033705c7bddc9b61d0dd699c83e2eb3e9f /src
parent9c1806283c5a631e44d1ecca016e217f889319ef (diff)
downloadmilf-rs-6b4f33444ad55b8264cf5ddb70b0bcdff57d42df.tar.gz
milf-rs-6b4f33444ad55b8264cf5ddb70b0bcdff57d42df.zip
Don't leave empty tables lying around
Diffstat (limited to 'src')
-rw-r--r--src/serialization.rs28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/serialization.rs b/src/serialization.rs
index 26fc7ba..395e85f 100644
--- a/src/serialization.rs
+++ b/src/serialization.rs
@@ -536,7 +536,15 @@ impl serialize::Decoder<DecodeError> for Decoder {
-> Result<T, DecodeError>
{
match self.toml {
- Some(Table(..)) => f(self),
+ Some(Table(..)) => {
+ let ret = try!(f(self));
+ match self.toml {
+ Some(Table(ref t)) if t.len() == 0 => {}
+ _ => return Ok(ret)
+ }
+ self.toml.take();
+ Ok(ret)
+ }
ref found => Err(self.mismatch("table", found)),
}
}
@@ -1017,4 +1025,22 @@ mod tests {
})
})));
}
+
+ #[test]
+ fn unused_fields3() {
+ #[deriving(Encodable, Decodable, PartialEq, Show)]
+ struct Foo { a: Bar }
+ #[deriving(Encodable, Decodable, PartialEq, Show)]
+ struct Bar { a: int }
+
+ let v = Foo { a: Bar { a: 2 } };
+ let mut d = Decoder::new(Table(map! {
+ a: Table(map! {
+ a: Integer(2)
+ })
+ }));
+ assert_eq!(v, Decodable::decode(&mut d).unwrap());
+
+ assert_eq!(d.toml, None);
+ }
}