From 06f916cb60808edba0690a91430cef40a5fdfdd4 Mon Sep 17 00:00:00 2001 From: Vincent Prouillet Date: Mon, 14 May 2018 16:59:24 +0200 Subject: Add the preserve_order feature --- src/value.rs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'src/value.rs') diff --git a/src/value.rs b/src/value.rs index ee952b6..07378cf 100644 --- a/src/value.rs +++ b/src/value.rs @@ -14,6 +14,9 @@ use serde::ser; use datetime::{self, DatetimeFromString}; pub use datetime::{Datetime, DatetimeParseError}; +pub use map::Map; + + /// Representation of a TOML value. #[derive(PartialEq, Clone, Debug)] pub enum Value { @@ -36,8 +39,10 @@ pub enum Value { /// Type representing a TOML array, payload of the `Value::Array` variant pub type Array = Vec; -/// Type representing a TOML table, payload of the `Value::Table` variant -pub type Table = BTreeMap; +/// Type representing a TOML table, payload of the `Value::Table` variant. +/// By default it is backed by a BTreeMap, enable the `preserve_order` feature +/// to use a LinkedHashMap instead. +pub type Table = Map; impl Value { /// Convert a `T` into `toml::Value` which is an enum that can represent @@ -525,10 +530,10 @@ impl<'de> de::Deserialize<'de> for Value { let date: DatetimeFromString = visitor.next_value()?; return Ok(Value::Datetime(date.value)); } - None => return Ok(Value::Table(BTreeMap::new())), + None => return Ok(Value::Table(Map::new())), Some(false) => {} } - let mut map = BTreeMap::new(); + let mut map = Map::new(); map.insert(key, visitor.next_value()?); while let Some(key) = visitor.next_key()? { if map.contains_key(&key) { @@ -663,12 +668,12 @@ impl<'de> de::SeqAccess<'de> for SeqDeserializer { } struct MapDeserializer { - iter: as IntoIterator>::IntoIter, + iter: as IntoIterator>::IntoIter, value: Option<(String, Value)>, } impl MapDeserializer { - fn new(map: BTreeMap) -> Self { + fn new(map: Map) -> Self { MapDeserializer { iter: map.into_iter(), value: None, @@ -881,7 +886,7 @@ impl ser::Serializer for Serializer { fn serialize_map(self, _len: Option) -> Result { Ok(SerializeMap { - map: BTreeMap::new(), + map: Map::new(), next_key: None, }) } @@ -910,7 +915,7 @@ struct SerializeVec { } struct SerializeMap { - map: BTreeMap, + map: Map, next_key: Option, } -- cgit v1.2.3