use std::borrow::Cow;
use std::fmt::Debug;
use hyper::header::{Headers, Header, HeaderFormat};
mod bootid;
mod configid;
mod man;
mod mx;
mod nt;
mod nts;
mod searchport;
mod securelocation;
mod st;
mod usn;
pub use self::bootid::BootID;
pub use self::configid::ConfigID;
pub use self::man::Man;
pub use self::mx::MX;
pub use self::nt::NT;
pub use self::nts::NTS;
pub use self::searchport::SearchPort;
pub use self::securelocation::SecureLocation;
pub use self::st::ST;
pub use self::usn::USN;
pub use hyper::header::{Location, Server, CacheControl, CacheDirective};
pub trait HeaderRef: Debug {
fn get<H>(&self) -> Option<&H> where H: Header + HeaderFormat;
fn get_raw(&self, name: &str) -> Option<&[Vec<u8>]>;
}
impl<'a, T: ?Sized> HeaderRef for &'a T
where T: HeaderRef
{
fn get<H>(&self) -> Option<&H>
where H: Header + HeaderFormat
{
HeaderRef::get::<H>(*self)
}
fn get_raw(&self, name: &str) -> Option<&[Vec<u8>]> {
HeaderRef::get_raw(*self, name)
}
}
impl<'a, T: ?Sized> HeaderRef for &'a mut T
where T: HeaderRef
{
fn get<H>(&self) -> Option<&H>
where H: Header + HeaderFormat
{
HeaderRef::get::<H>(*self)
}
fn get_raw(&self, name: &str) -> Option<&[Vec<u8>]> {
HeaderRef::get_raw(*self, name)
}
}
impl HeaderRef for Headers {
fn get<H>(&self) -> Option<&H>
where H: Header + HeaderFormat
{
Headers::get::<H>(self)
}
fn get_raw(&self, name: &str) -> Option<&[Vec<u8>]> {
Headers::get_raw(self, name)
}
}
pub trait HeaderMut: Debug {
fn set<H>(&mut self, value: H) where H: Header + HeaderFormat;
fn set_raw<K>(&mut self, name: K, value: Vec<Vec<u8>>) where K: Into<Cow<'static, str>> + Debug;
}
impl<'a, T: ?Sized> HeaderMut for &'a mut T
where T: HeaderMut
{
fn set<H>(&mut self, value: H)
where H: Header + HeaderFormat
{
HeaderMut::set(*self, value)
}
fn set_raw<K>(&mut self, name: K, value: Vec<Vec<u8>>)
where K: Into<Cow<'static, str>> + Debug
{
HeaderMut::set_raw(*self, name, value)
}
}
impl HeaderMut for Headers {
fn set<H>(&mut self, value: H)
where H: Header + HeaderFormat
{
Headers::set(self, value)
}
fn set_raw<K>(&mut self, name: K, value: Vec<Vec<u8>>)
where K: Into<Cow<'static, str>> + Debug
{
Headers::set_raw(self, name, value)
}
}