Skip to content

Commit 093a485

Browse files
committed
0.8.6 avoid the boolean checks on array/object printing
1 parent fc5d75e commit 093a485

File tree

1 file changed

+32
-20
lines changed

1 file changed

+32
-20
lines changed

src/codegen.rs

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -125,38 +125,50 @@ pub trait Generator {
125125
JsonValue::Null => self.write(b"null"),
126126
JsonValue::Array(ref array) => {
127127
self.write_char(b'[');
128-
self.indent();
129-
let mut first = true;
130-
for item in array {
131-
if first {
132-
first = false;
133-
self.new_line();
134-
} else {
135-
self.write_char(b',');
136-
self.new_line();
137-
}
128+
let mut iter = array.iter();
129+
130+
if let Some(item) = iter.next() {
131+
self.indent();
132+
self.new_line();
138133
self.write_json(item);
134+
} else {
135+
self.write_char(b']');
136+
return;
139137
}
138+
139+
for item in iter {
140+
self.write_char(b',');
141+
self.new_line();
142+
self.write_json(item);
143+
}
144+
140145
self.dedent();
141146
self.new_line();
142147
self.write_char(b']');
143148
},
144149
JsonValue::Object(ref object) => {
145150
self.write_char(b'{');
146-
self.indent();
147-
let mut first = true;
148-
for (key, value) in object.iter() {
149-
if first {
150-
first = false;
151-
self.new_line();
152-
} else {
153-
self.write_char(b',');
154-
self.new_line();
155-
}
151+
let mut iter = object.iter();
152+
153+
if let Some((key, value)) = iter.next() {
154+
self.indent();
155+
self.new_line();
156156
self.write_string(key);
157157
self.write_min(b": ", b':');
158158
self.write_json(value);
159+
} else {
160+
self.write_char(b'}');
161+
return;
159162
}
163+
164+
for (key, value) in iter {
165+
self.write_char(b',');
166+
self.new_line();
167+
self.write_string(key);
168+
self.write_min(b": ", b':');
169+
self.write_json(value);
170+
}
171+
160172
self.dedent();
161173
self.new_line();
162174
self.write_char(b'}');

0 commit comments

Comments
 (0)