diff --git a/Cargo.toml b/Cargo.toml index 2ddf410c..9fe1998c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ license = "MIT" authors = ["Sean McArthur "] keywords = ["http", "hyper", "hyperium"] categories = ["web-programming::http-client", "web-programming::http-server"] +build = "build.rs" [dependencies] base64 = "0.3.0" @@ -32,6 +33,9 @@ num_cpus = "1.0" pretty_env_logger = "0.1" spmc = "0.2" +[build-dependencies] +rustc_version = "0.1" + [features] default = [] nightly = [] diff --git a/build.rs b/build.rs new file mode 100644 index 00000000..e886b726 --- /dev/null +++ b/build.rs @@ -0,0 +1,7 @@ +extern crate rustc_version as rustc; + +fn main() { + if rustc::version_matches(">= 1.9") { + println!("cargo:rustc-cfg=has_deprecated"); + } +} diff --git a/src/header/mod.rs b/src/header/mod.rs index c5d73266..2d478ac5 100644 --- a/src/header/mod.rs +++ b/src/header/mod.rs @@ -598,23 +598,30 @@ impl<'a> FromIterator> for Headers { } } -impl<'a> fmt::Display for &'a (Header + Send + Sync) { - #[inline] - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - let mut multi = MultilineFormatter(Multi::Join(true, f)); - self.fmt_multi_header(&mut multi) +deprecated! { + #[deprecated(note="The semantics of formatting a HeaderFormat directly are not clear")] + impl<'a> fmt::Display for &'a (Header + Send + Sync) { + #[inline] + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let mut multi = MultilineFormatter(Multi::Join(true, f)); + self.fmt_multi_header(&mut multi) + } } } -/// A wrapper around any Header with a Display impl that calls `fmt_header`. -/// -/// This can be used like so: `format!("{}", HeaderFormatter(&header))` to -/// get the 'value string' representation of this Header. -/// -/// Note: This may not necessarily be the value written to stream, such -/// as with the SetCookie header. -pub struct HeaderFormatter<'a, H: Header>(pub &'a H); +deprecated! { + #[deprecated(note="The semantics of formatting a HeaderFormat directly are not clear")] + /// A wrapper around any Header with a Display impl that calls `fmt_header`. + /// + /// This can be used like so: `format!("{}", HeaderFormatter(&header))` to + /// get the 'value string' representation of this Header. + /// + /// Note: This may not necessarily be the value written to stream, such + /// as with the SetCookie header. + pub struct HeaderFormatter<'a, H: Header>(pub &'a H); +} +#[allow(deprecated)] impl<'a, H: Header> fmt::Display for HeaderFormatter<'a, H> { #[inline] fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { @@ -623,6 +630,7 @@ impl<'a, H: Header> fmt::Display for HeaderFormatter<'a, H> { } } +#[allow(deprecated)] impl<'a, H: Header> fmt::Debug for HeaderFormatter<'a, H> { #[inline] fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { diff --git a/src/lib.rs b/src/lib.rs index 05e5b191..1a4acaf7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -55,6 +55,13 @@ macro_rules! unimplemented { }); } +macro_rules! deprecated { + (#[$note:meta] $i:item) => ( + #[cfg_attr(has_deprecated, $note)] + $i + ); +} + #[cfg(test)] mod mock; pub mod client;