Skip to content

Commit 82201a6

Browse files
authored
update hyper to version 1.0 (#733)
* update hyper to version 1.0 * update reqwest to 0.12
1 parent fa9cd7b commit 82201a6

File tree

2 files changed

+45
-25
lines changed

2 files changed

+45
-25
lines changed

Cargo.toml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ once_cell = { version = "1.8.0", optional = true }
3535
## HTTP
3636
base64 = { version = "0.22", optional = true }
3737
bytes = { version = "1.0", optional = true }
38-
reqwest = { version = "0.11", optional = true, default-features = false, features = ["json"] }
38+
reqwest = { version = "0.12", optional = true, default-features = false, features = ["json"] }
3939
headers = { version = "0.4", optional = true }
4040
## WS
4141
# async-native-tls = { git = "https://github.com/async-email/async-native-tls.git", rev = "b5b5562d6cea77f913d4cbe448058c031833bf17", optional = true, default-features = false }
@@ -67,7 +67,9 @@ hex-literal = "0.4"
6767
wasm-bindgen-test = "0.3.19"
6868

6969
[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
70-
hyper = { version = "0.14", default-features = false, features = ["server"] }
70+
hyper = { version = "1", default-features = false, features = ["server"] }
71+
hyper-util = { version = "0.1", features = ["full"] }
72+
http-body-util = "0.1"
7173
tokio = { version = "1.0", features = ["full"] }
7274
tokio-stream = { version = "0.1", features = ["net"] }
7375

src/transports/http.rs

Lines changed: 41 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -193,44 +193,52 @@ fn id_of_output(output: &Output) -> Result<RequestId> {
193193
mod tests {
194194
use super::*;
195195
use crate::Error::Rpc;
196+
use bytes::Bytes;
197+
use http_body_util::{BodyExt, Full};
196198
use jsonrpc_core::ErrorCode;
197199
use std::net::TcpListener;
198200

199201
fn get_available_port() -> Option<u16> {
200202
Some(TcpListener::bind(("127.0.0.1", 0)).ok()?.local_addr().ok()?.port())
201203
}
202204

203-
async fn server(req: hyper::Request<hyper::Body>) -> hyper::Result<hyper::Response<hyper::Body>> {
204-
use hyper::body::HttpBody;
205-
205+
async fn server(req: hyper::Request<hyper::body::Incoming>) -> hyper::Result<hyper::Response<Full<Bytes>>> {
206206
let expected = r#"{"jsonrpc":"2.0","method":"eth_getAccounts","params":[],"id":0}"#;
207207
let response = r#"{"jsonrpc":"2.0","id":0,"result":"x"}"#;
208208

209209
assert_eq!(req.method(), &hyper::Method::POST);
210210
assert_eq!(req.uri().path(), "/");
211211
let mut content: Vec<u8> = vec![];
212-
let mut body = req.into_body();
213-
while let Some(Ok(chunk)) = body.data().await {
214-
content.extend(&*chunk);
215-
}
212+
let body = req.into_body();
213+
let body = body.collect().await?.to_bytes().to_vec();
214+
content.extend(body);
215+
216216
assert_eq!(std::str::from_utf8(&*content), Ok(expected));
217217

218-
Ok(hyper::Response::new(response.into()))
218+
Ok(hyper::Response::new(Full::new(Bytes::from(response))))
219219
}
220220

221221
#[tokio::test]
222222
async fn should_make_a_request() {
223-
use hyper::service::{make_service_fn, service_fn};
224-
223+
use hyper::service::service_fn;
224+
use hyper_util::{
225+
rt::{TokioExecutor, TokioIo},
226+
server::conn::auto,
227+
};
228+
use tokio::net::TcpListener;
225229
// given
226230
let addr = format!("127.0.0.1:{}", get_available_port().unwrap());
227-
// start server
228-
let service = make_service_fn(|_| async { Ok::<_, hyper::Error>(service_fn(server)) });
229-
let server = hyper::Server::bind(&addr.parse().unwrap()).serve(service);
230231
let addr_clone = addr.clone();
232+
// start server
233+
let listener = TcpListener::bind(addr.clone()).await.unwrap();
231234
tokio::spawn(async move {
232235
println!("Listening on http://{}", addr_clone);
233-
server.await.unwrap();
236+
let (stream, _) = listener.accept().await.unwrap();
237+
let io = TokioIo::new(stream);
238+
auto::Builder::new(TokioExecutor::new())
239+
.serve_connection(io, service_fn(server))
240+
.await
241+
.unwrap();
234242
});
235243

236244
// when
@@ -245,9 +253,15 @@ mod tests {
245253

246254
#[tokio::test]
247255
async fn catch_generic_json_error_for_batched_request() {
248-
use hyper::service::{make_service_fn, service_fn};
249-
250-
async fn handler(_req: hyper::Request<hyper::Body>) -> hyper::Result<hyper::Response<hyper::Body>> {
256+
use http_body_util::Full;
257+
use hyper::service::service_fn;
258+
use hyper_util::{
259+
rt::{TokioExecutor, TokioIo},
260+
server::conn::auto,
261+
};
262+
use tokio::net::TcpListener;
263+
264+
async fn handler(_req: hyper::Request<hyper::body::Incoming>) -> hyper::Result<hyper::Response<Full<Bytes>>> {
251265
let response = r#"{
252266
"jsonrpc":"2.0",
253267
"error":{
@@ -256,18 +270,22 @@ mod tests {
256270
},
257271
"id":null
258272
}"#;
259-
Ok(hyper::Response::<hyper::Body>::new(response.into()))
273+
Ok(hyper::Response::new(Full::new(Bytes::from(response))))
260274
}
261275

262-
// given
276+
// Given
263277
let addr = format!("127.0.0.1:{}", get_available_port().unwrap());
264-
// start server
265-
let service = make_service_fn(|_| async { Ok::<_, hyper::Error>(service_fn(handler)) });
266-
let server = hyper::Server::bind(&addr.parse().unwrap()).serve(service);
267278
let addr_clone = addr.clone();
279+
// start server
280+
let listener = TcpListener::bind(addr.clone()).await.unwrap();
268281
tokio::spawn(async move {
269282
println!("Listening on http://{}", addr_clone);
270-
server.await.unwrap();
283+
let (stream, _) = listener.accept().await.unwrap();
284+
let io = TokioIo::new(stream);
285+
auto::Builder::new(TokioExecutor::new())
286+
.serve_connection(io, service_fn(handler))
287+
.await
288+
.unwrap();
271289
});
272290

273291
// when

0 commit comments

Comments
 (0)