http: http broken in latest nightly

building http in the latest nightly of rust (2018-3-27 as of this writing) fails. A selection of the errors is below:

error: use of deprecated item 'std::ascii::AsciiExt': use inherent methods instead
  --> src\uri\mod.rs:32:5
   |
32 | use std::ascii::AsciiExt;
   |     ^^^^^^^^^^^^^^^^^^^^
   |
note: lint level defined here
  --> src\lib.rs:160:9
   |
160| #![deny(warnings, missing_docs, missing_debug_implementations)]
   |         ^^^^^^^^
   = note: #[deny(deprecated)] implied by #[deny(warnings)]

error[E0034]: multiple applicable items in scope
   --> src\method.rs:325:9
    |
325 |         Method::try_from(t.as_bytes())
    |         ^^^^^^^^^^^^^^^^ multiple `try_from` found
    |
    = note: candidate #1 is defined in an impl of the trait `std::convert::TryFrom` for the type `_`
note: candidate #2 is defined in the trait `convert::HttpTryFrom`
   --> src\convert.rs:22:5
    |
22  |     fn try_from(t: T) -> Result<Self, Self::Error>;
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    = help: to disambiguate the method call, write `convert::HttpTryFrom::try_from(...)` instead

It would seem the recent stabilization of TryFrom as well as the deprecation of AsciiExt have broken http.

Side note: Is Rust allowed to cause breakage like this with new versions of the compiler? I would think that it would be problematic to do so. TryFrom seems to be an issue since it is included in the prelude.

About this issue

  • Original URL
  • State: closed
  • Created 6 years ago
  • Comments: 15 (8 by maintainers)

Most upvoted comments

Seems the change was reverted for now : https://github.com/rust-lang/rust/pull/49518

Yeah, we’ll be looking at the crater report that runs for the first beta.

but if breaking the http crate is considered “expected breakage”

Are you arguing that the http crate is inherently special and must never be broken?

The “fix” seems to be to not include TryFrom in std’s prelude until the next Rust edition, which is coming soon.

Yeah, that’s probably what we’d do if we end up deciding to back the prelude part out. I don’t think prelude changes were formally covered in the epoch RFC but it definitely seems like something we would be able to do.