use super::parameter::ParameterParser;
use super::syntax;
pub struct HeaderField<'a> {
pub value: &'a [u8],
pub parameters: &'a [u8],
}
impl HeaderField<'_> {
pub fn get_parameter_iterator(&self) -> ParameterParser {
ParameterParser::new(self.parameters, b';', false)
}
}
pub trait AsHeaderField<'a> {
type Target;
fn as_header_field(&'a self) -> Self::Target;
}
impl<'a> AsHeaderField<'a> for [u8] {
type Target = HeaderField<'a>;
fn as_header_field(&'a self) -> HeaderField {
if let Some(idx) = syntax::index_with_token_escaping(self, b';') {
HeaderField {
value: &self[..idx],
parameters: &self[idx + 1..],
}
} else {
HeaderField {
value: self,
parameters: &[],
}
}
}
}
impl<'a> AsHeaderField<'a> for Vec<u8> {
type Target = HeaderField<'a>;
fn as_header_field(&'a self) -> HeaderField {
<[u8]>::as_header_field(self)
}
}