#[allow(unused_imports)]
use std::ascii::AsciiExt;
use std::slice::Iter as SliceIter;
use httparse::Header;
use enums::{Status};
use client::Head;
pub struct HeaderIter<'a> {
head: &'a Head<'a>,
iter: SliceIter<'a, Header<'a>>,
}
impl<'a> Head<'a> {
pub fn status(&self) -> Option<Status> {
Status::from(self.code)
}
pub fn raw_status(&self) -> (u16, &'a str) {
(self.code, self.reason)
}
pub fn headers(&self) -> HeaderIter {
HeaderIter {
head: self,
iter: self.headers.iter(),
}
}
pub fn all_headers(&self) -> &'a [Header<'a>] {
self.headers
}
}
impl<'a> Iterator for HeaderIter<'a> {
type Item = (&'a str, &'a [u8]);
fn next(&mut self) -> Option<(&'a str, &'a [u8])> {
while let Some(header) = self.iter.next() {
if header.name.eq_ignore_ascii_case("Connection") ||
header.name.eq_ignore_ascii_case("Transfer-Encoding") ||
header.name.eq_ignore_ascii_case("Content-Length")
{
continue;
}
if let Some(ref conn) = self.head.connection_header {
let mut conn_headers = conn.split(',').map(|x| x.trim());
if conn_headers.any(|x| x.eq_ignore_ascii_case(header.name)) {
continue;
}
}
return Some((header.name, header.value));
}
return None;
}
}