json_write/
write.rs

1pub trait JsonWrite: core::fmt::Write {
2    fn open_object(&mut self) -> core::fmt::Result {
3        write!(self, "{{")
4    }
5    fn close_object(&mut self) -> core::fmt::Result {
6        write!(self, "}}")
7    }
8
9    fn open_array(&mut self) -> core::fmt::Result {
10        write!(self, "[")
11    }
12    fn close_array(&mut self) -> core::fmt::Result {
13        write!(self, "]")
14    }
15
16    fn keyval_sep(&mut self) -> core::fmt::Result {
17        write!(self, ":")
18    }
19
20    /// Write an encoded JSON key
21    fn key(&mut self, value: impl crate::WriteJsonKey) -> core::fmt::Result {
22        value.write_json_key(self)
23    }
24
25    /// Write an encoded JSON scalar value
26    ///
27    /// <div class="warning">
28    ///
29    /// For floats, this preserves the sign bit for [`f32::NAN`] / [`f64::NAN`] for the sake of
30    /// format-preserving editing.
31    /// However, in most cases the sign bit is indeterminate and outputting signed NANs can be a
32    /// cause of non-repeatable behavior.
33    ///
34    /// For general serialization, you should discard the sign bit.  For example:
35    /// ```
36    /// # let mut v = f64::NAN;
37    /// if v.is_nan() {
38    ///     v = v.copysign(1.0);
39    /// }
40    /// ```
41    ///
42    /// </div>
43    fn value(&mut self, value: impl crate::WriteJsonValue) -> core::fmt::Result {
44        value.write_json_value(self)
45    }
46
47    fn val_sep(&mut self) -> core::fmt::Result {
48        write!(self, ",")
49    }
50
51    fn space(&mut self) -> core::fmt::Result {
52        write!(self, " ")
53    }
54
55    fn newline(&mut self) -> core::fmt::Result {
56        writeln!(self)
57    }
58}
59
60impl<W> JsonWrite for W where W: core::fmt::Write {}