katelyn martin 72ebcffb7d fix(http2): gate server Builder keep-alive interfaces (#3816)
currently, dependents of hyper 0.14 that enable the `server` and `http2`
feature flags will see an error if they enable the `backports` flag.

building hyper like so...

```sh
cargo check --features server,http2,backports
```

...will yield the following errors (shown in "short" format here for
brevity):

```text
src/server/conn.rs:75:9: warning: unused import: `tracing::trace`
src/server/conn/http2.rs:185:25: error[E0609]: no field `keep_alive_interval` on type `h2::server::Config`
src/server/conn/http2.rs:199:25: error[E0609]: no field `keep_alive_timeout` on type `h2::server::Config`
warning: `hyper` (lib) generated 1 warning
error: could not compile `hyper` (lib) due to 2 previous errors; 1 warning emitted
```

this stems from the fact that the deprecated connection builder
`hyper::server::conn::Builder` and the backported
`hyper::server::conn::http2::Builder` both operate on the same internal
`Config` structure. this structure has changed slightly between 0.14 and
1.0 however. see:

```sh
; git diff 0.14.x master -- src/proto/h2/server.rs | grep 'struct Config' -A 11
```

```diff
@@ -51,12 +51,11 @@ pub(crate) struct Config {
     pub(crate) max_concurrent_streams: Option<u32>,
     pub(crate) max_pending_accept_reset_streams: Option<usize>,
     pub(crate) max_local_error_reset_streams: Option<usize>,
-    #[cfg(feature = "runtime")]
     pub(crate) keep_alive_interval: Option<Duration>,
-    #[cfg(feature = "runtime")]
     pub(crate) keep_alive_timeout: Duration,
     pub(crate) max_send_buffer_size: usize,
     pub(crate) max_header_list_size: u32,
+    pub(crate) date_header: bool,
 }
```

the `runtime` feature flag has seen been removed. see:
<https://docs.rs/hyper/1.5.1/hyper/#optional-features>

the backported code, consequently, does not include these conditional
compilation attributes. i was able to recreate this as far back as
v0.14.25, when these backported types were first released.

this commit proposes the addition of `#[cfg(feature = "runtime")]`
attributes to the `keep_alive_timeout(..)` and `keep_alive_interval(..)`
methods of the backported http/2 server connection `Builder`.

this will allow hyper users that only require the `server` and `http2`
feature flags to address deprecations and prepare to upgrade to hyper
1.0, _without_ having to opt into previously disabled feature flags.

Signed-off-by: katelyn martin <me+cratelyn@katelyn.world>
2024-12-18 15:52:24 -05:00
2021-01-08 10:25:53 -08:00
2024-12-16 10:59:24 -05:00
2024-12-16 10:59:24 -05:00

hyper

crates.io Released API docs MIT licensed CI Discord chat

A fast and correct HTTP implementation for Rust.

  • HTTP/1 and HTTP/2
  • Asynchronous design
  • Leading in performance
  • Tested and correct
  • Extensive production use
  • Client and Server APIs

Get started by looking over the guides.

"Low-level"

hyper is a relatively low-level library, meant to be a building block for libraries and applications.

If you are looking for a convenient HTTP client, then you may wish to consider reqwest. If you are looking for a convenient HTTP server, then you may wish to consider Axum. Both are built on top of this library.

Contributing

To get involved, take a look at CONTRIBUTING.

If you prefer chatting, there is an active community in the Discord server.

License

hyper is provided under the MIT license. See LICENSE.

Description
An HTTP library for Rust
Readme MIT 21 MiB
Languages
Rust 96.2%
C 3.6%
Shell 0.2%