difftreelog
feat preserve object field order
in: trunk
5 files changed
crates/nixlike/Cargo.tomldiffbeforeafterboth--- a/crates/nixlike/Cargo.toml
+++ b/crates/nixlike/Cargo.toml
@@ -8,6 +8,7 @@
[dependencies]
anyhow = "1.0.44"
dprint-core = "0.46.2"
+linked-hash-map = "0.5.4"
peg = "0.7.0"
serde = "1.0.130"
serde_json = "1.0.68"
crates/nixlike/src/de_impl.rsdiffbeforeafterboth1use std::{2 collections::BTreeMap,3 convert::{TryFrom, TryInto},4};56use serde::{7 de::{self, MapAccess, SeqAccess},8 Deserializer,9};1011use crate::{Error, Value};1213struct ObjectAccess {14 iter: std::collections::btree_map::IntoIter<String, Value>,15 value: Option<Value>,16}17impl ObjectAccess {18 fn new(v: BTreeMap<String, Value>) -> Self {19 Self {20 iter: v.into_iter(),21 value: None,22 }23 }24}2526impl<'de> MapAccess<'de> for ObjectAccess {27 type Error = Error;2829 fn next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>, Self::Error>30 where31 K: de::DeserializeSeed<'de>,32 {33 if let Some((k, v)) = self.iter.next() {34 let _ = self.value.insert(v);35 Ok(Some(seed.deserialize(Value::String(k))?))36 } else {37 Ok(None)38 }39 }4041 fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, Self::Error>42 where43 V: de::DeserializeSeed<'de>,44 {45 seed.deserialize(self.value.take().unwrap())46 }47}4849struct ArrayAccess {50 iter: std::vec::IntoIter<Value>,51}52impl ArrayAccess {53 fn new(v: Vec<Value>) -> Self {54 Self {55 iter: v.into_iter(),56 }57 }58}5960impl<'de> SeqAccess<'de> for ArrayAccess {61 type Error = Error;6263 fn next_element_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>, Self::Error>64 where65 T: de::DeserializeSeed<'de>,66 {67 if let Some(v) = self.iter.next() {68 Ok(Some(seed.deserialize(v)?))69 } else {70 Ok(None)71 }72 }73}7475impl Value {76 fn parse_int<T: TryFrom<i64>>(&self) -> Result<T, Error> {77 match self {78 Value::Number(n) => Ok((*n).try_into().map_err(|_| Error::BadNumber)?),79 _ => Err(Error::Expected("integer")),80 }81 }82 fn parse_boolean(self) -> Result<bool, Error> {83 match self {84 Value::Boolean(b) => Ok(b),85 _ => Err(Error::Expected("boolean")),86 }87 }88 pub fn parse_string(&self) -> Result<&str, Error> {89 match self {90 Value::String(s) => Ok(s),91 _ => Err(Error::Expected("string")),92 }93 }94 fn parse_char(self) -> Result<char, Error> {95 match self {96 Value::String(s) if s.chars().count() == 1 => Ok(s.chars().next().unwrap()),97 _ => Err(Error::Expected("char")),98 }99 }100 fn parse_array(self) -> Result<Vec<Value>, Error> {101 match self {102 Value::Array(s) => Ok(s),103 _ => Err(Error::Expected("array")),104 }105 }106 fn parse_object(self) -> Result<BTreeMap<String, Value>, Error> {107 match self {108 Value::Object(s) => Ok(s),109 _ => Err(Error::Expected("object")),110 }111 }112 fn parse_null(self) -> Result<(), Error> {113 match self {114 Value::Null => Ok(()),115 _ => Err(Error::Expected("null")),116 }117 }118}119120impl de::Error for Error {121 fn custom<T>(msg: T) -> Self122 where123 T: std::fmt::Display,124 {125 Self::Custom(format!("{}", msg))126 }127}128129impl<'de> Deserializer<'de> for Value {130 type Error = Error;131132 fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>133 where134 V: serde::de::Visitor<'de>,135 {136 match self {137 Value::Number(f) => visitor.visit_i64(f),138 Value::String(s) => visitor.visit_str(&s),139 Value::Boolean(b) => visitor.visit_bool(b),140 Value::Object(o) => visitor.visit_map(ObjectAccess::new(o)),141 Value::Array(a) => visitor.visit_seq(ArrayAccess::new(a)),142 Value::Null => visitor.visit_none(),143 }144 }145146 fn deserialize_bool<V>(self, visitor: V) -> Result<V::Value, Self::Error>147 where148 V: serde::de::Visitor<'de>,149 {150 visitor.visit_bool(self.parse_boolean()?)151 }152153 fn deserialize_i8<V>(self, visitor: V) -> Result<V::Value, Self::Error>154 where155 V: serde::de::Visitor<'de>,156 {157 visitor.visit_i8(self.parse_int()?)158 }159160 fn deserialize_i16<V>(self, visitor: V) -> Result<V::Value, Self::Error>161 where162 V: serde::de::Visitor<'de>,163 {164 visitor.visit_i16(self.parse_int()?)165 }166167 fn deserialize_i32<V>(self, visitor: V) -> Result<V::Value, Self::Error>168 where169 V: serde::de::Visitor<'de>,170 {171 visitor.visit_i32(self.parse_int()?)172 }173174 fn deserialize_i64<V>(self, visitor: V) -> Result<V::Value, Self::Error>175 where176 V: serde::de::Visitor<'de>,177 {178 visitor.visit_i64(self.parse_int()?)179 }180181 fn deserialize_u8<V>(self, visitor: V) -> Result<V::Value, Self::Error>182 where183 V: serde::de::Visitor<'de>,184 {185 visitor.visit_u8(self.parse_int()?)186 }187188 fn deserialize_u16<V>(self, visitor: V) -> Result<V::Value, Self::Error>189 where190 V: serde::de::Visitor<'de>,191 {192 visitor.visit_u16(self.parse_int()?)193 }194195 fn deserialize_u32<V>(self, visitor: V) -> Result<V::Value, Self::Error>196 where197 V: serde::de::Visitor<'de>,198 {199 visitor.visit_u32(self.parse_int()?)200 }201202 fn deserialize_u64<V>(self, visitor: V) -> Result<V::Value, Self::Error>203 where204 V: serde::de::Visitor<'de>,205 {206 visitor.visit_u64(self.parse_int()?)207 }208209 fn deserialize_f32<V>(self, _visitor: V) -> Result<V::Value, Self::Error>210 where211 V: serde::de::Visitor<'de>,212 {213 todo!()214 }215216 fn deserialize_f64<V>(self, _visitor: V) -> Result<V::Value, Self::Error>217 where218 V: serde::de::Visitor<'de>,219 {220 todo!()221 }222223 fn deserialize_char<V>(self, visitor: V) -> Result<V::Value, Self::Error>224 where225 V: serde::de::Visitor<'de>,226 {227 visitor.visit_char(self.parse_char()?)228 }229230 fn deserialize_str<V>(self, visitor: V) -> Result<V::Value, Self::Error>231 where232 V: serde::de::Visitor<'de>,233 {234 visitor.visit_str(self.parse_string()?)235 }236237 fn deserialize_string<V>(self, visitor: V) -> Result<V::Value, Self::Error>238 where239 V: serde::de::Visitor<'de>,240 {241 visitor.visit_string(self.parse_string()?.to_owned())242 }243244 fn deserialize_bytes<V>(self, _visitor: V) -> Result<V::Value, Self::Error>245 where246 V: serde::de::Visitor<'de>,247 {248 todo!()249 }250251 fn deserialize_byte_buf<V>(self, _visitor: V) -> Result<V::Value, Self::Error>252 where253 V: serde::de::Visitor<'de>,254 {255 todo!()256 }257258 fn deserialize_option<V>(self, visitor: V) -> Result<V::Value, Self::Error>259 where260 V: serde::de::Visitor<'de>,261 {262 match self {263 Value::Null => visitor.visit_none(),264 v => visitor.visit_some(v),265 }266 }267268 fn deserialize_unit<V>(self, visitor: V) -> Result<V::Value, Self::Error>269 where270 V: serde::de::Visitor<'de>,271 {272 self.parse_null()?;273 visitor.visit_unit()274 }275276 fn deserialize_unit_struct<V>(277 self,278 _name: &'static str,279 visitor: V,280 ) -> Result<V::Value, Self::Error>281 where282 V: serde::de::Visitor<'de>,283 {284 self.deserialize_unit(visitor)285 }286287 fn deserialize_newtype_struct<V>(288 self,289 _name: &'static str,290 visitor: V,291 ) -> Result<V::Value, Self::Error>292 where293 V: serde::de::Visitor<'de>,294 {295 visitor.visit_newtype_struct(self)296 }297298 fn deserialize_seq<V>(self, visitor: V) -> Result<V::Value, Self::Error>299 where300 V: serde::de::Visitor<'de>,301 {302 visitor.visit_seq(self.parse_array().map(ArrayAccess::new)?)303 }304305 fn deserialize_tuple<V>(self, _len: usize, visitor: V) -> Result<V::Value, Self::Error>306 where307 V: serde::de::Visitor<'de>,308 {309 self.deserialize_seq(visitor)310 }311312 fn deserialize_tuple_struct<V>(313 self,314 _name: &'static str,315 _len: usize,316 visitor: V,317 ) -> Result<V::Value, Self::Error>318 where319 V: serde::de::Visitor<'de>,320 {321 self.deserialize_seq(visitor)322 }323324 fn deserialize_map<V>(self, visitor: V) -> Result<V::Value, Self::Error>325 where326 V: serde::de::Visitor<'de>,327 {328 visitor.visit_map(self.parse_object().map(ObjectAccess::new)?)329 }330331 fn deserialize_struct<V>(332 self,333 _name: &'static str,334 _fields: &'static [&'static str],335 visitor: V,336 ) -> Result<V::Value, Self::Error>337 where338 V: serde::de::Visitor<'de>,339 {340 self.deserialize_map(visitor)341 }342343 fn deserialize_enum<V>(344 self,345 _name: &'static str,346 _variants: &'static [&'static str],347 _visitor: V,348 ) -> Result<V::Value, Self::Error>349 where350 V: serde::de::Visitor<'de>,351 {352 todo!()353 }354355 fn deserialize_identifier<V>(self, visitor: V) -> Result<V::Value, Self::Error>356 where357 V: serde::de::Visitor<'de>,358 {359 self.deserialize_str(visitor)360 }361362 fn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>363 where364 V: serde::de::Visitor<'de>,365 {366 self.deserialize_any(visitor)367 }368}1use std::convert::{TryFrom, TryInto};23use linked_hash_map::LinkedHashMap;4use serde::{5 de::{self, MapAccess, SeqAccess},6 Deserializer,7};89use crate::{Error, Value};1011struct ObjectAccess {12 iter: linked_hash_map::IntoIter<String, Value>,13 value: Option<Value>,14}15impl ObjectAccess {16 fn new(v: LinkedHashMap<String, Value>) -> Self {17 Self {18 iter: v.into_iter(),19 value: None,20 }21 }22}2324impl<'de> MapAccess<'de> for ObjectAccess {25 type Error = Error;2627 fn next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>, Self::Error>28 where29 K: de::DeserializeSeed<'de>,30 {31 if let Some((k, v)) = self.iter.next() {32 let _ = self.value.insert(v);33 Ok(Some(seed.deserialize(Value::String(k))?))34 } else {35 Ok(None)36 }37 }3839 fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, Self::Error>40 where41 V: de::DeserializeSeed<'de>,42 {43 seed.deserialize(self.value.take().unwrap())44 }45}4647struct ArrayAccess {48 iter: std::vec::IntoIter<Value>,49}50impl ArrayAccess {51 fn new(v: Vec<Value>) -> Self {52 Self {53 iter: v.into_iter(),54 }55 }56}5758impl<'de> SeqAccess<'de> for ArrayAccess {59 type Error = Error;6061 fn next_element_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>, Self::Error>62 where63 T: de::DeserializeSeed<'de>,64 {65 if let Some(v) = self.iter.next() {66 Ok(Some(seed.deserialize(v)?))67 } else {68 Ok(None)69 }70 }71}7273impl Value {74 fn parse_int<T: TryFrom<i64>>(&self) -> Result<T, Error> {75 match self {76 Value::Number(n) => Ok((*n).try_into().map_err(|_| Error::BadNumber)?),77 _ => Err(Error::Expected("integer")),78 }79 }80 fn parse_boolean(self) -> Result<bool, Error> {81 match self {82 Value::Boolean(b) => Ok(b),83 _ => Err(Error::Expected("boolean")),84 }85 }86 pub fn parse_string(&self) -> Result<&str, Error> {87 match self {88 Value::String(s) => Ok(s),89 _ => Err(Error::Expected("string")),90 }91 }92 fn parse_char(self) -> Result<char, Error> {93 match self {94 Value::String(s) if s.chars().count() == 1 => Ok(s.chars().next().unwrap()),95 _ => Err(Error::Expected("char")),96 }97 }98 fn parse_array(self) -> Result<Vec<Value>, Error> {99 match self {100 Value::Array(s) => Ok(s),101 _ => Err(Error::Expected("array")),102 }103 }104 fn parse_object(self) -> Result<LinkedHashMap<String, Value>, Error> {105 match self {106 Value::Object(s) => Ok(s),107 _ => Err(Error::Expected("object")),108 }109 }110 fn parse_null(self) -> Result<(), Error> {111 match self {112 Value::Null => Ok(()),113 _ => Err(Error::Expected("null")),114 }115 }116}117118impl de::Error for Error {119 fn custom<T>(msg: T) -> Self120 where121 T: std::fmt::Display,122 {123 Self::Custom(format!("{}", msg))124 }125}126127impl<'de> Deserializer<'de> for Value {128 type Error = Error;129130 fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>131 where132 V: serde::de::Visitor<'de>,133 {134 match self {135 Value::Number(f) => visitor.visit_i64(f),136 Value::String(s) => visitor.visit_str(&s),137 Value::Boolean(b) => visitor.visit_bool(b),138 Value::Object(o) => visitor.visit_map(ObjectAccess::new(o)),139 Value::Array(a) => visitor.visit_seq(ArrayAccess::new(a)),140 Value::Null => visitor.visit_none(),141 }142 }143144 fn deserialize_bool<V>(self, visitor: V) -> Result<V::Value, Self::Error>145 where146 V: serde::de::Visitor<'de>,147 {148 visitor.visit_bool(self.parse_boolean()?)149 }150151 fn deserialize_i8<V>(self, visitor: V) -> Result<V::Value, Self::Error>152 where153 V: serde::de::Visitor<'de>,154 {155 visitor.visit_i8(self.parse_int()?)156 }157158 fn deserialize_i16<V>(self, visitor: V) -> Result<V::Value, Self::Error>159 where160 V: serde::de::Visitor<'de>,161 {162 visitor.visit_i16(self.parse_int()?)163 }164165 fn deserialize_i32<V>(self, visitor: V) -> Result<V::Value, Self::Error>166 where167 V: serde::de::Visitor<'de>,168 {169 visitor.visit_i32(self.parse_int()?)170 }171172 fn deserialize_i64<V>(self, visitor: V) -> Result<V::Value, Self::Error>173 where174 V: serde::de::Visitor<'de>,175 {176 visitor.visit_i64(self.parse_int()?)177 }178179 fn deserialize_u8<V>(self, visitor: V) -> Result<V::Value, Self::Error>180 where181 V: serde::de::Visitor<'de>,182 {183 visitor.visit_u8(self.parse_int()?)184 }185186 fn deserialize_u16<V>(self, visitor: V) -> Result<V::Value, Self::Error>187 where188 V: serde::de::Visitor<'de>,189 {190 visitor.visit_u16(self.parse_int()?)191 }192193 fn deserialize_u32<V>(self, visitor: V) -> Result<V::Value, Self::Error>194 where195 V: serde::de::Visitor<'de>,196 {197 visitor.visit_u32(self.parse_int()?)198 }199200 fn deserialize_u64<V>(self, visitor: V) -> Result<V::Value, Self::Error>201 where202 V: serde::de::Visitor<'de>,203 {204 visitor.visit_u64(self.parse_int()?)205 }206207 fn deserialize_f32<V>(self, _visitor: V) -> Result<V::Value, Self::Error>208 where209 V: serde::de::Visitor<'de>,210 {211 todo!()212 }213214 fn deserialize_f64<V>(self, _visitor: V) -> Result<V::Value, Self::Error>215 where216 V: serde::de::Visitor<'de>,217 {218 todo!()219 }220221 fn deserialize_char<V>(self, visitor: V) -> Result<V::Value, Self::Error>222 where223 V: serde::de::Visitor<'de>,224 {225 visitor.visit_char(self.parse_char()?)226 }227228 fn deserialize_str<V>(self, visitor: V) -> Result<V::Value, Self::Error>229 where230 V: serde::de::Visitor<'de>,231 {232 visitor.visit_str(self.parse_string()?)233 }234235 fn deserialize_string<V>(self, visitor: V) -> Result<V::Value, Self::Error>236 where237 V: serde::de::Visitor<'de>,238 {239 visitor.visit_string(self.parse_string()?.to_owned())240 }241242 fn deserialize_bytes<V>(self, _visitor: V) -> Result<V::Value, Self::Error>243 where244 V: serde::de::Visitor<'de>,245 {246 todo!()247 }248249 fn deserialize_byte_buf<V>(self, _visitor: V) -> Result<V::Value, Self::Error>250 where251 V: serde::de::Visitor<'de>,252 {253 todo!()254 }255256 fn deserialize_option<V>(self, visitor: V) -> Result<V::Value, Self::Error>257 where258 V: serde::de::Visitor<'de>,259 {260 match self {261 Value::Null => visitor.visit_none(),262 v => visitor.visit_some(v),263 }264 }265266 fn deserialize_unit<V>(self, visitor: V) -> Result<V::Value, Self::Error>267 where268 V: serde::de::Visitor<'de>,269 {270 self.parse_null()?;271 visitor.visit_unit()272 }273274 fn deserialize_unit_struct<V>(275 self,276 _name: &'static str,277 visitor: V,278 ) -> Result<V::Value, Self::Error>279 where280 V: serde::de::Visitor<'de>,281 {282 self.deserialize_unit(visitor)283 }284285 fn deserialize_newtype_struct<V>(286 self,287 _name: &'static str,288 visitor: V,289 ) -> Result<V::Value, Self::Error>290 where291 V: serde::de::Visitor<'de>,292 {293 visitor.visit_newtype_struct(self)294 }295296 fn deserialize_seq<V>(self, visitor: V) -> Result<V::Value, Self::Error>297 where298 V: serde::de::Visitor<'de>,299 {300 visitor.visit_seq(self.parse_array().map(ArrayAccess::new)?)301 }302303 fn deserialize_tuple<V>(self, _len: usize, visitor: V) -> Result<V::Value, Self::Error>304 where305 V: serde::de::Visitor<'de>,306 {307 self.deserialize_seq(visitor)308 }309310 fn deserialize_tuple_struct<V>(311 self,312 _name: &'static str,313 _len: usize,314 visitor: V,315 ) -> Result<V::Value, Self::Error>316 where317 V: serde::de::Visitor<'de>,318 {319 self.deserialize_seq(visitor)320 }321322 fn deserialize_map<V>(self, visitor: V) -> Result<V::Value, Self::Error>323 where324 V: serde::de::Visitor<'de>,325 {326 visitor.visit_map(self.parse_object().map(ObjectAccess::new)?)327 }328329 fn deserialize_struct<V>(330 self,331 _name: &'static str,332 _fields: &'static [&'static str],333 visitor: V,334 ) -> Result<V::Value, Self::Error>335 where336 V: serde::de::Visitor<'de>,337 {338 self.deserialize_map(visitor)339 }340341 fn deserialize_enum<V>(342 self,343 _name: &'static str,344 _variants: &'static [&'static str],345 _visitor: V,346 ) -> Result<V::Value, Self::Error>347 where348 V: serde::de::Visitor<'de>,349 {350 todo!()351 }352353 fn deserialize_identifier<V>(self, visitor: V) -> Result<V::Value, Self::Error>354 where355 V: serde::de::Visitor<'de>,356 {357 self.deserialize_str(visitor)358 }359360 fn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>361 where362 V: serde::de::Visitor<'de>,363 {364 self.deserialize_any(visitor)365 }366}crates/nixlike/src/lib.rsdiffbeforeafterboth--- a/crates/nixlike/src/lib.rs
+++ b/crates/nixlike/src/lib.rs
@@ -1,5 +1,4 @@
-use std::collections::BTreeMap;
-
+use linked_hash_map::LinkedHashMap;
use peg::str::LineCol;
use se_impl::MySerialize;
use serde::{Deserialize, Serialize};
@@ -29,7 +28,7 @@
Number(i64),
String(String),
Boolean(bool),
- Object(BTreeMap<String, Value>),
+ Object(LinkedHashMap<String, Value>),
Array(Vec<Value>),
Null,
}
@@ -49,11 +48,11 @@
/ "false" {false} } / expected!("<boolean>")
rule indent() -> String
= quiet! { s:$(['a'..='z' | 'A'..='Z' | '0'..='9' | '_' | '-']+) { s.to_owned() } } / expected!("<identifier>")
- rule object() -> BTreeMap<String, Value>
+ rule object() -> LinkedHashMap<String, Value>
= "{" _
e:(k:indent()++(_ "." _) _ "=" _ v:value() _ ";" _ {(k, v)})*
"}" {?
- let mut out = BTreeMap::new();
+ let mut out = LinkedHashMap::new();
for (k, v) in e {
let mut map = &mut out;
for v in k.iter().take(k.len() - 1) {
crates/nixlike/src/se_impl.rsdiffbeforeafterboth--- a/crates/nixlike/src/se_impl.rs
+++ b/crates/nixlike/src/se_impl.rs
@@ -1,5 +1,6 @@
-use std::{collections::BTreeMap, convert::TryInto};
+use std::convert::TryInto;
+use linked_hash_map::LinkedHashMap;
use serde::{
ser::{
self, SerializeMap, SerializeSeq, SerializeStruct, SerializeStructVariant, SerializeTuple,
@@ -96,7 +97,7 @@
}
}
-pub struct MySerializeMap(BTreeMap<String, Value>, Option<String>);
+pub struct MySerializeMap(LinkedHashMap<String, Value>, Option<String>);
impl SerializeMap for MySerializeMap {
type Ok = Value;
@@ -127,7 +128,7 @@
}
}
-pub struct MySerializeStruct(BTreeMap<String, Value>);
+pub struct MySerializeStruct(LinkedHashMap<String, Value>);
impl SerializeStruct for MySerializeStruct {
type Ok = Value;
@@ -147,7 +148,7 @@
}
}
-pub struct MySerializeStructVariant(String, BTreeMap<String, Value>);
+pub struct MySerializeStructVariant(String, LinkedHashMap<String, Value>);
impl SerializeStructVariant for MySerializeStructVariant {
type Ok = Value;
@@ -336,7 +337,7 @@
}
fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap, Self::Error> {
- Ok(MySerializeMap(BTreeMap::new(), None))
+ Ok(MySerializeMap(LinkedHashMap::new(), None))
}
fn serialize_struct(
@@ -344,7 +345,7 @@
_name: &'static str,
_len: usize,
) -> Result<Self::SerializeStruct, Self::Error> {
- Ok(MySerializeStruct(BTreeMap::new()))
+ Ok(MySerializeStruct(LinkedHashMap::new()))
}
fn serialize_struct_variant(
@@ -356,7 +357,7 @@
) -> Result<Self::SerializeStructVariant, Self::Error> {
Ok(MySerializeStructVariant(
variant.to_owned(),
- BTreeMap::new(),
+ LinkedHashMap::new(),
))
}
}
crates/nixlike/src/to_string.rsdiffbeforeafterboth--- a/crates/nixlike/src/to_string.rs
+++ b/crates/nixlike/src/to_string.rs
@@ -41,7 +41,7 @@
out.push_signal(Signal::StartIndent);
out.push_condition(conditions::if_true_or(
"array start",
- is_multiple_lines.clone(),
+ is_multiple_lines,
Signal::NewLine.into(),
Signal::SpaceOrNewLine.into(),
));
@@ -49,7 +49,7 @@
write_nix_buf(item, out);
out.push_condition(conditions::if_true_or(
"element separator",
- is_multiple_lines.clone(),
+ is_multiple_lines,
Signal::NewLine.into(),
Signal::SpaceOrNewLine.into(),
));
@@ -73,7 +73,7 @@
out.push_signal(Signal::StartIndent);
out.push_condition(conditions::if_true_or(
"object start",
- is_multiple_lines.clone(),
+ is_multiple_lines,
Signal::NewLine.into(),
Signal::SpaceOrNewLine.into(),
));
@@ -81,7 +81,7 @@
write_nix_obj_key_buf(k, v, out);
out.push_condition(conditions::if_true_or(
"element separator",
- is_multiple_lines.clone(),
+ is_multiple_lines,
Signal::NewLine.into(),
Signal::SpaceOrNewLine.into(),
));