Skip to main content

aws_multipart_upload/encoder/
json_encoder.rs

1use bytes::BufMut as _;
2use serde::Serialize;
3
4use super::PartEncoder;
5use crate::request::{PartBody, PartNumber};
6
7/// `JsonLinesEncoder` implements `Encoder` by writing items as lines of JSON to
8/// the part.
9#[derive(Debug, Clone, Copy, Default)]
10pub struct JsonLinesEncoder {
11    _p: (),
12}
13
14impl JsonLinesEncoder {
15    /// Create a new `JsonLinesEncoder`.
16    pub fn new() -> Self {
17        Self::default()
18    }
19}
20
21impl<Item: Serialize> PartEncoder<Item> for JsonLinesEncoder {
22    type Error = serde_json::Error;
23
24    fn encode(
25        &mut self,
26        part: &mut PartBody,
27        _part_number: PartNumber,
28        item: Item,
29    ) -> Result<(), Self::Error> {
30        let item = serde_json::to_vec(&item)?;
31        part.reserve(item.len() + 1);
32        part.put(item.as_ref());
33        part.put_u8(b'\n');
34        Ok(())
35    }
36}