use crate::{MailHeader, MailHeaderMap};
use std::fmt;
use std::slice;
pub struct Headers<'a> {
raw_bytes: &'a [u8],
headers: &'a [MailHeader<'a>],
}
impl<'a> Headers<'a> {
pub(crate) fn new(raw_bytes: &'a [u8], headers: &'a [MailHeader<'a>]) -> Headers<'a> {
Headers { raw_bytes, headers }
}
pub fn get_raw_bytes(&self) -> &'a [u8] {
self.raw_bytes
}
}
impl<'a> IntoIterator for Headers<'a> {
type Item = &'a MailHeader<'a>;
type IntoIter = slice::Iter<'a, MailHeader<'a>>;
fn into_iter(self) -> Self::IntoIter {
self.headers.into_iter()
}
}
impl<'a> fmt::Debug for Headers<'a> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("Headers")
.field("headers", &self.headers)
.finish()
}
}
impl<'a> MailHeaderMap for Headers<'a> {
fn get_first_value(&self, key: &str) -> Option<String> {
self.headers.get_first_value(key)
}
fn get_first_header(&self, key: &str) -> Option<&MailHeader> {
self.headers.get_first_header(key)
}
fn get_all_values(&self, key: &str) -> Vec<String> {
self.headers.get_all_values(key)
}
fn get_all_headers(&self, key: &str) -> Vec<&MailHeader> {
self.headers.get_all_headers(key)
}
}