Function serde_json::to_writer_pretty
source · pub fn to_writer_pretty<W, T>(writer: W, value: &T) -> Result<()>where
W: Write,
T: ?Sized + Serialize,
Available on crate feature
std
only.Expand description
Serialize the given data structure as pretty-printed JSON into the IO stream.
Errors
Serialization can fail if T
’s implementation of Serialize
decides to
fail, or if T
contains a map with non-string keys.
Examples found in repository?
More examples
src/value/mod.rs (line 250)
221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
struct WriterFormatter<'a, 'b: 'a> {
inner: &'a mut fmt::Formatter<'b>,
}
impl<'a, 'b> io::Write for WriterFormatter<'a, 'b> {
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
// Safety: the serializer below only emits valid utf8 when using
// the default formatter.
let s = unsafe { str::from_utf8_unchecked(buf) };
tri!(self.inner.write_str(s).map_err(io_error));
Ok(buf.len())
}
fn flush(&mut self) -> io::Result<()> {
Ok(())
}
}
fn io_error(_: fmt::Error) -> io::Error {
// Error value does not matter because Display impl just maps it
// back to fmt::Error.
io::Error::new(io::ErrorKind::Other, "fmt error")
}
let alternate = f.alternate();
let mut wr = WriterFormatter { inner: f };
if alternate {
// {:#}
super::ser::to_writer_pretty(&mut wr, self).map_err(|_| fmt::Error)
} else {
// {}
super::ser::to_writer(&mut wr, self).map_err(|_| fmt::Error)
}
}