mail_builder/headers/
text.rs1use std::borrow::Cow;
2
3use super::{
4 Header,
5 fold::{FoldWriter, write_unstructured},
6};
7use crate::{encoders::encode::EncodingType, writer::Writer};
8
9#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
11pub struct Text<'x> {
12 pub text: Cow<'x, str>,
13}
14
15impl<'x> Text<'x> {
16 pub fn new(text: impl Into<Cow<'x, str>>) -> Self {
18 Self {
19 text: text.into(),
20 }
21 }
22}
23
24impl<'x, T> From<T> for Text<'x>
25where
26 T: Into<Cow<'x, str>>,
27{
28 fn from(value: T) -> Self {
29 Self::new(value)
30 }
31}
32
33impl Header for Text<'_> {
34 fn write_header(&self, output: &mut impl Writer, column: usize) {
35 let mut folder = FoldWriter::new(output, column);
36
37 match EncodingType::for_header(self.text.as_bytes()) {
38 EncodingType::Base64 => folder.write_b_words(&self.text, b""),
39 EncodingType::QuotedPrintable(is_ascii) => folder.write_q_words::<false>(&self.text, is_ascii, b""),
40 EncodingType::None => write_unstructured(&mut folder, self.text.as_bytes()),
41 }
42
43 folder.finish();
44 }
45}