Name Description Size
common
disabled
lib.rs # Typed HTTP Headers hyper has the opinion that headers should be strongly-typed, because that's why we're using Rust in the first place. To set or get any header, an object must implement the `Header` trait from this module. Several common headers are already provided, such as `Host`, `ContentType`, `UserAgent`, and others. # Why Typed? Or, why not stringly-typed? Types give the following advantages: - More difficult to typo, since typos in types should be caught by the compiler - Parsing to a proper type by default # Defining Custom Headers ## Implementing the `Header` trait Consider a Do Not Track header. It can be true or false, but it represents that via the numerals `1` and `0`. ``` extern crate http; extern crate headers; use headers::{Header, HeaderName, HeaderValue}; struct Dnt(bool); impl Header for Dnt { fn name() -> &'static HeaderName { &http::header::DNT } fn decode<'i, I>(values: &mut I) -> Result<Self, headers::Error> where I: Iterator<Item = &'i HeaderValue>, { let value = values .next() .ok_or_else(headers::Error::invalid)?; if value == "0" { Ok(Dnt(false)) } else if value == "1" { Ok(Dnt(true)) } else { Err(headers::Error::invalid()) } } fn encode<E>(&self, values: &mut E) where E: Extend<HeaderValue>, { let s = if self.0 { "1" } else { "0" }; let value = HeaderValue::from_static(s); values.extend(std::iter::once(value)); } } ``` 2549
map_ext.rs 2350
util