mail_parser/core/
builder.rs1use crate::{HeaderName, HeaderValue, MessageParser};
8
9impl MessageParser {
10 pub fn new() -> Self {
18 Self {
19 header_map: Default::default(),
20 def_hdr_parse_fnc: |s| s.parse_raw(),
21 }
22 }
23
24 pub fn with_mime_headers(self) -> Self {
36 self.header_content_type(HeaderName::ContentType)
37 .header_content_type(HeaderName::ContentDisposition)
38 .header_id(HeaderName::ContentId)
39 .header_text(HeaderName::ContentDescription)
40 .header_text(HeaderName::ContentLocation)
41 .header_text(HeaderName::ContentTransferEncoding)
42 }
43
44 pub fn with_date_headers(self) -> Self {
50 self.header_date(HeaderName::Date)
51 .header_date(HeaderName::ResentDate)
52 }
53
54 pub fn with_address_headers(self) -> Self {
69 self.header_address(HeaderName::From)
70 .header_address(HeaderName::Sender)
71 .header_address(HeaderName::ReplyTo)
72 .header_address(HeaderName::To)
73 .header_address(HeaderName::Cc)
74 .header_address(HeaderName::Bcc)
75 .header_address(HeaderName::ResentFrom)
76 .header_address(HeaderName::ResentSender)
77 .header_address(HeaderName::ResentTo)
78 .header_address(HeaderName::ResentCc)
79 .header_address(HeaderName::ResentBcc)
80 }
81
82 pub fn with_message_ids(self) -> Self {
90 self.header_id(HeaderName::MessageId)
91 .header_id(HeaderName::InReplyTo)
92 .header_id(HeaderName::References)
93 .header_id(HeaderName::ResentMessageId)
94 }
95
96 pub fn with_minimal_headers(self) -> Self {
106 self.with_mime_headers()
107 .header_date(HeaderName::Date)
108 .header_text(HeaderName::Subject)
109 .header_address(HeaderName::From)
110 .header_address(HeaderName::ReplyTo)
111 .header_address(HeaderName::To)
112 .header_address(HeaderName::Cc)
113 .header_address(HeaderName::Bcc)
114 }
115
116 pub fn without_header(mut self, header: impl Into<HeaderName<'static>>) -> Self {
118 self.header_map.remove(&header.into());
119 self
120 }
121
122 pub fn header_text(mut self, header: impl Into<HeaderName<'static>>) -> Self {
124 self.header_map
125 .insert(header.into(), |s| s.parse_unstructured());
126 self
127 }
128
129 pub fn header_date(mut self, header: impl Into<HeaderName<'static>>) -> Self {
131 self.header_map.insert(header.into(), |s| s.parse_date());
132 self
133 }
134
135 pub fn header_address(mut self, header: impl Into<HeaderName<'static>>) -> Self {
137 self.header_map.insert(header.into(), |s| s.parse_address());
138 self
139 }
140
141 pub fn header_id(mut self, header: impl Into<HeaderName<'static>>) -> Self {
143 self.header_map.insert(header.into(), |s| s.parse_id());
144 self
145 }
146
147 pub fn header_content_type(mut self, header: impl Into<HeaderName<'static>>) -> Self {
149 self.header_map
150 .insert(header.into(), |s| s.parse_content_type());
151 self
152 }
153
154 pub fn header_comma_separated(mut self, header: impl Into<HeaderName<'static>>) -> Self {
156 self.header_map
157 .insert(header.into(), |s| s.parse_comma_separared());
158 self
159 }
160
161 pub fn header_received(mut self, header: impl Into<HeaderName<'static>>) -> Self {
163 self.header_map
164 .insert(header.into(), |s| s.parse_received());
165 self
166 }
167
168 pub fn header_raw(mut self, header: impl Into<HeaderName<'static>>) -> Self {
170 self.header_map.insert(header.into(), |s| s.parse_raw());
171 self
172 }
173
174 pub fn ignore_header(mut self, header: impl Into<HeaderName<'static>>) -> Self {
176 self.header_map.insert(header.into(), |s| {
177 s.parse_and_ignore();
178 HeaderValue::Empty
179 });
180 self
181 }
182
183 pub fn default_header_text(mut self) -> Self {
185 self.def_hdr_parse_fnc = |s| s.parse_unstructured();
186 self
187 }
188
189 pub fn default_header_raw(mut self) -> Self {
191 self.def_hdr_parse_fnc = |s| s.parse_raw();
192 self
193 }
194
195 pub fn default_header_ignore(mut self) -> Self {
197 self.def_hdr_parse_fnc = |s| {
198 s.parse_and_ignore();
199 HeaderValue::Empty
200 };
201 self
202 }
203}
204
205impl Default for MessageParser {
206 fn default() -> Self {
207 Self::new()
208 }
209}