Upgrade http from 0.2 to 1.0
… and related dependencies.
This commit is contained in:
parent
7b373b78bb
commit
3760d69ade
@ -13,7 +13,7 @@ assert_matches2 = "0.1.0"
|
|||||||
assign = "1.1.1"
|
assign = "1.1.1"
|
||||||
base64 = "0.21.0"
|
base64 = "0.21.0"
|
||||||
criterion = "0.5.0"
|
criterion = "0.5.0"
|
||||||
http = "0.2.8"
|
http = "1.1.0"
|
||||||
js_int = "0.2.2"
|
js_int = "0.2.2"
|
||||||
maplit = "1.0.2"
|
maplit = "1.0.2"
|
||||||
ruma-appservice-api = { version = "0.9.0", path = "crates/ruma-appservice-api" }
|
ruma-appservice-api = { version = "0.9.0", path = "crates/ruma-appservice-api" }
|
||||||
|
@ -19,7 +19,7 @@ rustdoc-args = ["--cfg", "docsrs"]
|
|||||||
client-api = ["dep:as_variant", "dep:ruma-client-api"]
|
client-api = ["dep:as_variant", "dep:ruma-client-api"]
|
||||||
|
|
||||||
# HTTP clients
|
# HTTP clients
|
||||||
hyper = ["dep:hyper"]
|
hyper = ["dep:http-body-util", "dep:hyper", "dep:hyper-util"]
|
||||||
hyper-native-tls = ["hyper", "dep:hyper-tls"]
|
hyper-native-tls = ["hyper", "dep:hyper-tls"]
|
||||||
hyper-rustls = ["hyper", "dep:hyper-rustls"]
|
hyper-rustls = ["hyper", "dep:hyper-rustls"]
|
||||||
reqwest = ["dep:reqwest"]
|
reqwest = ["dep:reqwest"]
|
||||||
@ -37,10 +37,12 @@ async-stream = "0.3.0"
|
|||||||
bytes = "1.0.1"
|
bytes = "1.0.1"
|
||||||
futures-core = "0.3.8"
|
futures-core = "0.3.8"
|
||||||
http = { workspace = true }
|
http = { workspace = true }
|
||||||
hyper = { version = "0.14.2", optional = true, features = ["client", "http1", "http2", "tcp"] }
|
http-body-util = { version = "0.1.1", optional = true }
|
||||||
hyper-rustls = { version = "0.24.0", optional = true, default-features = false }
|
hyper = { version = "1.3.1", optional = true, features = ["client", "http1", "http2"] }
|
||||||
hyper-tls = { version = "0.5.0", optional = true }
|
hyper-rustls = { version = "0.27.1", optional = true, default-features = false }
|
||||||
reqwest = { version = "0.11.4", optional = true, default-features = false }
|
hyper-tls = { version = "0.6.0", optional = true }
|
||||||
|
hyper-util = { version = "0.1.3", optional = true, features = ["client-legacy", "http1", "http2", "tokio"] }
|
||||||
|
reqwest = { version = "0.12.4", optional = true, default-features = false }
|
||||||
ruma-client-api = { workspace = true, optional = true, features = ["client"] }
|
ruma-client-api = { workspace = true, optional = true, features = ["client"] }
|
||||||
ruma-common = { workspace = true, features = ["api"] }
|
ruma-common = { workspace = true, features = ["api"] }
|
||||||
serde_html_form = { workspace = true }
|
serde_html_form = { workspace = true }
|
||||||
|
@ -1,44 +1,46 @@
|
|||||||
use bytes::{Bytes, BytesMut};
|
use bytes::{Bytes, BytesMut};
|
||||||
use hyper::client::{connect::Connect, HttpConnector};
|
use http_body_util::{BodyExt as _, Full};
|
||||||
|
use hyper_util::{
|
||||||
|
client::legacy::connect::{Connect, HttpConnector},
|
||||||
|
rt::TokioExecutor,
|
||||||
|
};
|
||||||
|
|
||||||
use super::{DefaultConstructibleHttpClient, HttpClient};
|
use super::{DefaultConstructibleHttpClient, HttpClient};
|
||||||
|
|
||||||
/// A basic hyper HTTP client.
|
/// A hyper HTTP client.
|
||||||
///
|
///
|
||||||
/// You basically never want this, since it doesn't support `https`.
|
/// The default connector is rarely useful, since it doesn't support `https`.
|
||||||
pub type Hyper = hyper::Client<HttpConnector>;
|
pub type Hyper<C = HttpConnector> = hyper_util::client::legacy::Client<C, Full<Bytes>>;
|
||||||
|
|
||||||
/// A hyper HTTP client using native-tls for TLS support.
|
/// A hyper HTTP client using native-tls for TLS support.
|
||||||
#[cfg(feature = "hyper-native-tls")]
|
#[cfg(feature = "hyper-native-tls")]
|
||||||
pub type HyperNativeTls = hyper::Client<hyper_tls::HttpsConnector<HttpConnector>>;
|
pub type HyperNativeTls = Hyper<hyper_tls::HttpsConnector<HttpConnector>>;
|
||||||
|
|
||||||
/// A hyper HTTP client using rustls for TLS support.
|
/// A hyper HTTP client using rustls for TLS support.
|
||||||
///
|
///
|
||||||
/// This client does not implement `DefaultConstructibleHttpClient`. To use it, you need to manually
|
/// This client does not implement `DefaultConstructibleHttpClient`.
|
||||||
/// construct
|
/// To use it, you need to manually create an instance.
|
||||||
#[cfg(feature = "hyper-rustls")]
|
#[cfg(feature = "hyper-rustls")]
|
||||||
pub type HyperRustls = hyper::Client<hyper_rustls::HttpsConnector<HttpConnector>>;
|
pub type HyperRustls = Hyper<hyper_rustls::HttpsConnector<HttpConnector>>;
|
||||||
|
|
||||||
impl<C> HttpClient for hyper::Client<C>
|
impl<C> HttpClient for Hyper<C>
|
||||||
where
|
where
|
||||||
C: Connect + Clone + Send + Sync + 'static,
|
C: Connect + Clone + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
type RequestBody = BytesMut;
|
type RequestBody = BytesMut;
|
||||||
type ResponseBody = Bytes;
|
type ResponseBody = Bytes;
|
||||||
type Error = hyper::Error;
|
type Error = Box<dyn std::error::Error + Send + Sync>;
|
||||||
|
|
||||||
async fn send_http_request(
|
async fn send_http_request(
|
||||||
&self,
|
&self,
|
||||||
req: http::Request<BytesMut>,
|
req: http::Request<BytesMut>,
|
||||||
) -> Result<http::Response<Bytes>, hyper::Error> {
|
) -> Result<http::Response<Bytes>, Self::Error> {
|
||||||
let (head, body) = self
|
let (head, body) =
|
||||||
.request(req.map(|body| hyper::body::Body::from(body.freeze())))
|
self.request(req.map(|body| Full::new(body.freeze()))).await?.into_parts();
|
||||||
.await?
|
|
||||||
.into_parts();
|
|
||||||
|
|
||||||
// FIXME: Use aggregate instead of to_bytes once serde_json can parse from a reader at a
|
// FIXME: Use aggregate instead of to_bytes once serde_json can parse from a reader at a
|
||||||
// comparable speed as reading from a slice: https://github.com/serde-rs/json/issues/160
|
// comparable speed as reading from a slice: https://github.com/serde-rs/json/issues/160
|
||||||
let body = hyper::body::to_bytes(body).await?;
|
let body = body.collect().await?.to_bytes();
|
||||||
Ok(http::Response::from_parts(head, body))
|
Ok(http::Response::from_parts(head, body))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -46,13 +48,15 @@ where
|
|||||||
#[cfg(feature = "hyper")]
|
#[cfg(feature = "hyper")]
|
||||||
impl DefaultConstructibleHttpClient for Hyper {
|
impl DefaultConstructibleHttpClient for Hyper {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
hyper::Client::new()
|
hyper_util::client::legacy::Client::builder(TokioExecutor::new())
|
||||||
|
.build(HttpConnector::new())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "hyper-native-tls")]
|
#[cfg(feature = "hyper-native-tls")]
|
||||||
impl DefaultConstructibleHttpClient for HyperNativeTls {
|
impl DefaultConstructibleHttpClient for HyperNativeTls {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
hyper::Client::builder().build(hyper_tls::HttpsConnector::new())
|
hyper_util::client::legacy::Client::builder(TokioExecutor::new())
|
||||||
|
.build(hyper_tls::HttpsConnector::new())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ all-features = true
|
|||||||
rustdoc-args = ["--cfg", "docsrs"]
|
rustdoc-args = ["--cfg", "docsrs"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
headers = "0.3"
|
headers = "0.4.0"
|
||||||
ruma-common = { workspace = true }
|
ruma-common = { workspace = true }
|
||||||
tracing = { workspace = true }
|
tracing = { workspace = true }
|
||||||
yap = "0.11.0"
|
yap = "0.11.0"
|
||||||
|
@ -11,9 +11,11 @@ ruma = { version = "0.9.4", path = "../../crates/ruma", features = ["client-api-
|
|||||||
# ruma = { git = "https://github.com/ruma/ruma", rev = "f161c8117c706fc52089999e1f406cf34276ec9d", features = ["client-api-c", "client", "client-hyper-native-tls", "events"] }
|
# ruma = { git = "https://github.com/ruma/ruma", rev = "f161c8117c706fc52089999e1f406cf34276ec9d", features = ["client-api-c", "client", "client-hyper-native-tls", "events"] }
|
||||||
|
|
||||||
futures-util = { version = "0.3.21", default-features = false, features = ["std"] }
|
futures-util = { version = "0.3.21", default-features = false, features = ["std"] }
|
||||||
http = "0.2.2"
|
http = "1.1.0"
|
||||||
hyper = "0.14.2"
|
http-body-util = "0.1.1"
|
||||||
hyper-tls = "0.5.0"
|
hyper = "1.3.1"
|
||||||
|
hyper-tls = "0.6.0"
|
||||||
|
hyper-util = { version = "0.1.3", features = ["client-legacy", "http1", "http2", "tokio"] }
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
tokio = { version = "1", features = ["full"] }
|
tokio = { version = "1", features = ["full"] }
|
||||||
tokio-stream = "0.1.7"
|
tokio-stream = "0.1.7"
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
use std::{error::Error, io, process::exit, time::Duration};
|
use std::{error::Error, io, process::exit, time::Duration};
|
||||||
|
|
||||||
use futures_util::future::{join, join_all};
|
use futures_util::future::{join, join_all};
|
||||||
|
use http_body_util::BodyExt as _;
|
||||||
|
use hyper_util::rt::TokioExecutor;
|
||||||
use ruma::{
|
use ruma::{
|
||||||
api::client::{
|
api::client::{
|
||||||
filter::FilterDefinition, membership::join_room_by_id, message::send_message_event,
|
filter::FilterDefinition, membership::join_room_by_id, message::send_message_event,
|
||||||
@ -34,8 +36,8 @@ type MatrixClient = client::Client<client::http_client::HyperNativeTls>;
|
|||||||
async fn run() -> Result<(), Box<dyn Error>> {
|
async fn run() -> Result<(), Box<dyn Error>> {
|
||||||
let config =
|
let config =
|
||||||
read_config().await.map_err(|e| format!("configuration in ./config is invalid: {e}"))?;
|
read_config().await.map_err(|e| format!("configuration in ./config is invalid: {e}"))?;
|
||||||
let http_client =
|
let http_client = hyper_util::client::legacy::Client::builder(TokioExecutor::new())
|
||||||
hyper::Client::builder().build::<_, hyper::Body>(hyper_tls::HttpsConnector::new());
|
.build(hyper_tls::HttpsConnector::new());
|
||||||
let matrix_client = if let Some(state) = read_state().await.ok().flatten() {
|
let matrix_client = if let Some(state) = read_state().await.ok().flatten() {
|
||||||
ruma::Client::builder()
|
ruma::Client::builder()
|
||||||
.homeserver_url(config.homeserver.clone())
|
.homeserver_url(config.homeserver.clone())
|
||||||
@ -204,7 +206,7 @@ async fn get_joke(client: &HttpClient) -> Result<String, Box<dyn Error>> {
|
|||||||
let uri = "https://v2.jokeapi.dev/joke/Programming,Pun,Misc?safe-mode&type=single"
|
let uri = "https://v2.jokeapi.dev/joke/Programming,Pun,Misc?safe-mode&type=single"
|
||||||
.parse::<hyper::Uri>()?;
|
.parse::<hyper::Uri>()?;
|
||||||
let rsp = client.get(uri).await?;
|
let rsp = client.get(uri).await?;
|
||||||
let bytes = hyper::body::to_bytes(rsp).await?;
|
let bytes = rsp.into_body().collect().await?.to_bytes();
|
||||||
let joke_obj = serde_json::from_slice::<JsonValue>(&bytes)
|
let joke_obj = serde_json::from_slice::<JsonValue>(&bytes)
|
||||||
.map_err(|_| "invalid JSON returned from joke API")?;
|
.map_err(|_| "invalid JSON returned from joke API")?;
|
||||||
let joke = joke_obj["joke"].as_str().ok_or("joke field missing from joke API response")?;
|
let joke = joke_obj["joke"].as_str().ok_or("joke field missing from joke API response")?;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user