musli_json/en/
object_pair_encoder.rs1use musli::en::EntryEncoder;
2use musli::Context;
3use musli_utils::Writer;
4
5use super::{JsonEncoder, JsonObjectKeyEncoder};
6
7pub(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}