Skip to content

Commit a1ca32a

Browse files
committed
Factor out byte array serialization to a new Formatter method
1 parent 857b010 commit a1ca32a

File tree

1 file changed

+20
-21
lines changed

1 file changed

+20
-21
lines changed

src/ser.rs

+20-21
Original file line numberDiff line numberDiff line change
@@ -187,29 +187,10 @@ where
187187
format_escaped_str(&mut self.writer, &mut self.formatter, value).map_err(Error::io)
188188
}
189189

190+
#[inline]
190191
fn serialize_bytes(self, value: &[u8]) -> Result<()> {
191-
tri!(self
192-
.formatter
193-
.begin_array(&mut self.writer)
194-
.map_err(Error::io));
195-
let mut first = true;
196-
for byte in value {
197-
tri!(self
198-
.formatter
199-
.begin_array_value(&mut self.writer, first)
200-
.map_err(Error::io));
201-
tri!(self
202-
.formatter
203-
.write_u8(&mut self.writer, *byte)
204-
.map_err(Error::io));
205-
tri!(self
206-
.formatter
207-
.end_array_value(&mut self.writer)
208-
.map_err(Error::io));
209-
first = false;
210-
}
211192
self.formatter
212-
.end_array(&mut self.writer)
193+
.write_byte_array(&mut self.writer, value)
213194
.map_err(Error::io)
214195
}
215196

@@ -1786,6 +1767,24 @@ pub trait Formatter {
17861767
writer.write_all(s)
17871768
}
17881769

1770+
/// Writes the representation of a byte array. Formatters can choose whether
1771+
/// to represent bytes as a JSON array of integers (the default), or some
1772+
/// JSON string encoding like hex or base64.
1773+
fn write_byte_array<W>(&mut self, writer: &mut W, value: &[u8]) -> io::Result<()>
1774+
where
1775+
W: ?Sized + io::Write,
1776+
{
1777+
tri!(self.begin_array(writer));
1778+
let mut first = true;
1779+
for byte in value {
1780+
tri!(self.begin_array_value(writer, first));
1781+
tri!(self.write_u8(writer, *byte));
1782+
tri!(self.end_array_value(writer));
1783+
first = false;
1784+
}
1785+
self.end_array(writer)
1786+
}
1787+
17891788
/// Called before every array. Writes a `[` to the specified
17901789
/// writer.
17911790
#[inline]

0 commit comments

Comments
 (0)