Skip to content

Commit ecb5c35

Browse files
committed
Upgrade to toml = 0.6.0.
toml 0.6 is based on toml_edit, it: - allows to preserve order - fixes some mis-serializaitons, e.g. with mixed lists - does not require order of non-/table values in maps This reverts the previous commit.
1 parent 30a67a8 commit ecb5c35

3 files changed

Lines changed: 83 additions & 71 deletions

File tree

Cargo.lock

Lines changed: 74 additions & 21 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,16 @@ serde_cbor = "0.11.2"
4848
serde_json = "1.0.81"
4949
serde_yaml = "0.9.16"
5050
structopt = "0.3.26"
51-
toml = "0.5.9"
5251
yaml-rust = "0.4.5"
5352

5453
[dependencies.avro-rs]
5554
version = "0.6.5"
5655
features = ["snappy"]
5756

57+
[dependencies.toml]
58+
version = "0.6.0"
59+
features = ["preserve_order"]
60+
5861
[profile.release]
5962
lto = true
6063
codegen-units = 1

src/value/toml.rs

Lines changed: 5 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ impl value::Source for Source {
3535
fn read(&mut self) -> error::Result<Option<value::Value>> {
3636
match self.0.take() {
3737
Some(v) => {
38-
let mut de = toml::de::Deserializer::new(v.as_str());
39-
match serde::Deserialize::deserialize(&mut de) {
38+
let de = toml::de::Deserializer::new(v.as_str());
39+
match serde::Deserialize::deserialize(de) {
4040
Ok(v) => Ok(Some(v)),
4141
Err(e) => Err(error::Error::from(e)),
4242
}
@@ -51,59 +51,15 @@ where
5151
W: io::Write,
5252
{
5353
#[inline]
54-
fn write(&mut self, mut value: value::Value) -> error::Result<()> {
55-
enforce_toml_output_order(&mut value);
54+
fn write(&mut self, value: value::Value) -> error::Result<()> {
5655
let mut string = String::new();
5756
{
58-
let mut ser = toml::ser::Serializer::new(&mut string);
59-
serde::Serialize::serialize(&value, &mut ser)?;
57+
let ser = toml::ser::Serializer::new(&mut string);
58+
serde::Serialize::serialize(&value, ser)?;
6059
}
6160

6261
self.0.write_all(string.as_bytes())?;
6362
self.0.write_all(b"\n")?;
6463
Ok(())
6564
}
6665
}
67-
68-
fn enforce_toml_output_order(value: &mut value::Value) {
69-
match value {
70-
value::Value::Sequence(seq) => seq.iter_mut().for_each(enforce_toml_output_order),
71-
value::Value::Map(map) => {
72-
map.iter_mut()
73-
.for_each(|(_, v)| enforce_toml_output_order(v));
74-
map.sort_by_key(|(_, v)| Category::of(v));
75-
}
76-
_ => (),
77-
}
78-
}
79-
80-
#[derive(PartialEq, Eq, PartialOrd, Ord)]
81-
enum Category {
82-
Primitive,
83-
Array,
84-
Table,
85-
}
86-
87-
impl Category {
88-
fn of(value: &value::Value) -> Category {
89-
match value {
90-
value::Value::Unit
91-
| value::Value::Bool(_)
92-
| value::Value::I8(_)
93-
| value::Value::I16(_)
94-
| value::Value::I32(_)
95-
| value::Value::I64(_)
96-
| value::Value::U8(_)
97-
| value::Value::U16(_)
98-
| value::Value::U32(_)
99-
| value::Value::U64(_)
100-
| value::Value::F32(_)
101-
| value::Value::F64(_)
102-
| value::Value::Char(_)
103-
| value::Value::String(_)
104-
| value::Value::Bytes(_) => Category::Primitive,
105-
value::Value::Sequence(_) => Category::Array,
106-
value::Value::Map(_) => Category::Table,
107-
}
108-
}
109-
}

0 commit comments

Comments
 (0)