aws_multipart_upload/encoder/
lines_encoder.rs1use std::convert::Infallible;
2
3use bytes::BufMut as _;
4
5use super::PartEncoder;
6use crate::request::{PartBody, PartNumber};
7
8#[derive(Debug, Clone, Default)]
11pub struct LinesEncoder {
12 header: Option<String>,
13}
14
15impl LinesEncoder {
16 pub fn new() -> Self {
18 Self::default()
19 }
20
21 pub fn with_header<T: Into<String>>(self, header: T) -> Self {
24 Self { header: Some(header.into()) }
25 }
26}
27
28impl<Item: AsRef<str>> PartEncoder<Item> for LinesEncoder {
29 type Error = Infallible;
30
31 fn encode(
32 &mut self,
33 part: &mut PartBody,
34 part_number: PartNumber,
35 item: Item,
36 ) -> Result<(), Self::Error> {
37 let item = item.as_ref().as_bytes();
38 if let Some(header) = self.header.as_ref()
39 && part.is_empty()
40 && part_number.is_first()
41 {
42 let header = header.as_bytes();
43 part.reserve(item.len() + header.len() + 2);
45 part.put(header);
46 part.put_u8(b'\n');
47 } else {
48 part.reserve(item.len() + 1);
49 }
50 part.put(item);
51 part.put_u8(b'\n');
52 Ok(())
53 }
54}