From dd109bc9e9b8a6a5585e8bf1093ec84dcad61309 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Fri, 29 Jul 2016 10:23:06 -0700 Subject: Touch up the encoder/decoder a bit * Whitespace things * Don't make `State` public * Remove `#[cfg]` annotations --- src/encoder/rustc_serialize.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/encoder/rustc_serialize.rs') diff --git a/src/encoder/rustc_serialize.rs b/src/encoder/rustc_serialize.rs index 6dce66a..0eda740 100644 --- a/src/encoder/rustc_serialize.rs +++ b/src/encoder/rustc_serialize.rs @@ -5,6 +5,38 @@ use Value; use super::{Encoder, Error, State}; use super::Error::*; +impl Encoder { + fn table(&mut self, f: F) -> Result<(), Error> + where F: FnOnce(&mut Encoder) -> Result<(), Error> + { + match mem::replace(&mut self.state, State::Start) { + State::NextKey(key) => { + let mut nested = Encoder::new(); + try!(f(&mut nested)); + self.toml.insert(key, Value::Table(nested.toml)); + Ok(()) + } + State::NextArray(mut arr) => { + let mut nested = Encoder::new(); + try!(f(&mut nested)); + arr.push(Value::Table(nested.toml)); + self.state = State::NextArray(arr); + Ok(()) + } + State::Start => f(self), + State::NextMapKey => Err(Error::InvalidMapKeyLocation), + } + } + + fn seq(&mut self, f: F) -> Result<(), Error> + where F: FnOnce(&mut Encoder) -> Result<(), Error> + { + let old = try!(self.seq_begin()); + try!(f(self)); + self.seq_end(old) + } +} + impl rustc_serialize::Encoder for Encoder { type Error = Error; -- cgit v1.2.3