Breaking error when upgrading Hyper from 0.14.X to 1.X.X
Closed this issue · 0 comments
- I have looked for existing issues (including closed) about this
Bug Report
Version
├── axum v0.7.4
│ ├── axum-core v0.4.3
Platform
Linux DESKTOP-GU276AE 5.15.133.1-microsoft-standard-WSL2 #1 SMP Thu Oct 5 21:02:42 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Crates
│ ├── hyper v1.1.0
Description
Short summary of the bug
I get a breaking error when upgrading from Hyper 0.14 to 1.X. I have followed the Hyper upgrade recommendations found here: https://hyper.rs/guides/1/upgrading/#:~:text=Prepare%20with%20Backports%20and%20Deprecations.%20Before%20upgrading%2C,enabling%20the%20backports%20and%20deprecated%20features%20of
Error message
Here is the error when using Hyper 1.0.0, I have also tried 1.1.0 with the same results:
error[E0277]: the trait bound `fn(std::option::Option<Query<Pagination>>, axum::extract::State<Arc<std::sync::Mutex<TagDictionary>>>) -> impl futures_util::Future<Output = Result<impl IntoResponse, hyper::StatusCode>> {adv::tags::get_tags}: Handler<_, _, _>` is not satisfied
--> server/src/http_server/routes/api/v1/adv/tags/mod.rs:22:25
|
22 | .route("/", get(get_tags))
| --- ^^^^^^^^ the trait `Handler<_, _, _>` is not implemented for fn item `fn(Option<Query<Pagination>>, State<Arc<Mutex<TagDictionary>>>) -> impl Future<Output = ...> {get_tags}`
| |
| required by a bound introduced by this call
|
= help: the following other types implement trait `Handler<T, S, B>`:
<Layered<L, H, T, S, B, B2> as Handler<T, S, B2>>
<MethodRouter<S, B> as Handler<(), S, B>>
note: required by a bound in `axum::routing::get`
--> /home/niels/.cargo/registry/src/index.crates.io-6f17d22bba15001f/axum-0.6.18/src/routing/method_routing.rs:403:1
|
403 | top_level_handler_fn!(get, GET);
| ^^^^^^^^^^^^^^^^^^^^^^---^^^^^^
| | |
| | required by a bound in this function
| required by this bound in `get`
= note: this error originates in the macro `top_level_handler_fn` (in Nightly builds, run with -Z macro-backtrace for more info)
I tried this code:
Here is my code (it is simplified to just cause the issue to happen once):
pub fn routes(tag_dictionary_ref: Arc<Mutex<TagDictionary>>) -> Router {
let router = Router::new()
.route("/", get(get_tags))
.with_state(tag_dictionary_ref);
router
}
Here is the function that is called:
async fn get_tags(
pagination: Option<Query<Pagination>>,
State(tag_dictionary_ref): State<Arc<Mutex<TagDictionary>>>,
) -> Result<impl IntoResponse, StatusCode> {
let Query(pagination) = pagination.unwrap_or_default();
let limit = pagination.limit.unwrap_or(100);
let offset = pagination.offset;
let order = pagination.order;
let after_tag_name = pagination.after_tag_name;
let tag_definitions: Vec<TagDefinition> = utilities::get_tag_definition_list(tag_dictionary_ref, order, offset, after_tag_name, limit)?;
Ok(Json(tag_definitions))
}
I have tried asking GitHub Copilot, but there is nothing that seems to make sense.
I have posted the question on Discord as well, but prefer this as the response channel.
This works (but it is not what I would like)
The issue disappears when using Hyper 0.14.28
What am I doing wrong?
Thanks in advance,
Niels