musli_json/en/
object_pair_encoder.rs

1use musli::en::EntryEncoder;
2use musli::Context;
3use musli_utils::Writer;
4
5use super::{JsonEncoder, JsonObjectKeyEncoder};
6
7/// Encoder for a JSON object pair.
8pub(crate) struct JsonObjectPairEncoder<'a, W, C: ?Sized> {
9    cx: &'a C,
10    empty: bool,
11    writer: W,
12}
13
14impl<'a, W, C: ?Sized> JsonObjectPairEncoder<'a, W, C> {
15    #[inline]
16    pub(super) const fn new(cx: &'a C, empty: bool, writer: W) -> Self {
17        Self { cx, empty, writer }
18    }
19}
20
21impl<'a, W, C> EntryEncoder for JsonObjectPairEncoder<'a, W, C>
22where
23    W: Writer,
24    C: ?Sized + Context,
25{
26    type Cx = C;
27    type Ok = ();
28    type EncodeKey<'this> = JsonObjectKeyEncoder<'a, W::Mut<'this>, C>
29    where
30        Self: 'this;
31    type EncodeValue<'this> = JsonEncoder<'a, W::Mut<'this>, C> where Self: 'this;
32
33    #[inline]
34    fn encode_key(&mut self) -> Result<Self::EncodeKey<'_>, C::Error> {
35        if !self.empty {
36            self.writer.write_byte(self.cx, b',')?;
37        }
38
39        Ok(JsonObjectKeyEncoder::new(self.cx, self.writer.borrow_mut()))
40    }
41
42    #[inline]
43    fn encode_value(&mut self) -> Result<Self::EncodeValue<'_>, C::Error> {
44        self.writer.write_byte(self.cx, b':')?;
45        Ok(JsonEncoder::new(self.cx, self.writer.borrow_mut()))
46    }
47
48    #[inline]
49    fn finish_entry(self) -> Result<Self::Ok, C::Error> {
50        Ok(())
51    }
52}