Skip to content

Commit 09661dd

Browse files
Upgrade dependencies, including http and hyper, where possible. (#233)
* Upgrade axum. Breaks docs. Signed-off-by: Omar Zabala-Ferrera <[email protected]> * Upgrade several dependencies. delegate-attr, base64, snafu, bitflags, hostname, and serde_yaml. Signed-off-by: Omar Zabala-Ferrera <[email protected]> * Change target wasm32-wasi to wasm32-wasip1. Signed-off-by: Omar Zabala-Ferrera <[email protected]> --------- Signed-off-by: Omar Zabala-Ferrera <[email protected]>
1 parent 9b38aea commit 09661dd

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+638
-171
lines changed

.github/workflows/rust_tests.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222
- x86_64-unknown-linux-gnu
2323
- x86_64-unknown-linux-musl
2424
- wasm32-unknown-unknown
25-
- wasm32-wasi
25+
- wasm32-wasip1
2626
steps:
2727
- uses: actions/checkout@v2
2828

@@ -104,14 +104,14 @@ jobs:
104104
with:
105105
command: build
106106
toolchain: ${{ matrix.toolchain }}
107-
args: --target ${{ matrix.target }} --features "http-binding hyper hyper_wasi"
107+
args: --target ${{ matrix.target }} --features "http-0-2-binding hyper-0-14 hyper_wasi"
108108
- uses: actions-rs/cargo@v1
109109
name: "Test"
110110
if: matrix.target == 'wasm32-wasi'
111111
with:
112112
command: test
113113
toolchain: ${{ matrix.toolchain }}
114-
args: --target ${{ matrix.target }} --features "http-binding hyper hyper_wasi"
114+
args: --target ${{ matrix.target }} --features "http-0-2-binding hyper-0-14 hyper_wasi"
115115
env:
116116
CARGO_TARGET_WASM32_WASI_RUNNER: wasmedge
117117
# Build examples

Cargo.toml

+27-24
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "cloudevents-sdk"
3-
version = "0.7.0"
3+
version = "0.8.0"
44
authors = ["Francesco Guardiani <[email protected]>"]
55
license-file = "LICENSE"
66
edition = "2018"
@@ -23,72 +23,75 @@ name = "cloudevents"
2323

2424
[features]
2525
http-binding = ["async-trait", "bytes", "futures", "http"]
26-
actix = ["actix-web", "actix-http", "async-trait", "bytes", "futures", "http"]
26+
http-0-2-binding = ["async-trait", "bytes", "futures", "http-0-2"]
27+
actix = ["actix-web", "actix-http", "async-trait", "bytes", "futures", "http-0-2"]
2728
reqwest = ["reqwest-lib", "async-trait", "bytes", "http", "uuid/js"]
2829
rdkafka = ["rdkafka-lib", "bytes", "futures"]
29-
warp = ["warp-lib", "bytes", "http", "hyper"]
30-
axum = ["bytes", "http", "hyper", "axum-lib", "http-body", "async-trait"]
31-
poem = ["bytes", "http", "poem-lib", "hyper", "async-trait"]
30+
warp = ["warp-lib", "bytes", "http-0-2", "http-body-util", "hyper-0-14"]
31+
axum = ["bytes", "http", "hyper", "axum-lib", "http-body-util", "async-trait"]
32+
poem = ["bytes", "http", "poem-lib", "hyper", "async-trait", "http-body-util", "futures"]
3233
nats = ["nats-lib"]
3334

3435
[dependencies]
3536
serde = { version = "^1.0", features = ["derive"] }
3637
serde_json = "^1.0"
3738
chrono = { version = "^0.4", features = ["serde"] }
38-
delegate-attr = "^0.2"
39-
base64 = "^0.12"
40-
url = { version = "^2.1", features = ["serde"] }
41-
snafu = "^0.6"
42-
bitflags = "^1.2"
39+
delegate-attr = "^0.3"
40+
base64 = "^0.22"
41+
url = { version = "^2.5", features = ["serde"] }
42+
snafu = "^0.8"
43+
bitflags = "^2.6"
4344
uuid = { version = "1", features = ["v4"] }
4445

4546
# runtime optional deps
4647
actix-web = { version = "4", optional = true }
4748
actix-http = { version = "3", optional = true }
48-
reqwest-lib = { version = "^0.11", default-features = false, features = ["rustls-tls"], optional = true, package = "reqwest" }
49+
reqwest-lib = { version = "^0.12", default-features = false, features = ["rustls-tls"], optional = true, package = "reqwest" }
4950
rdkafka-lib = { version = "^0.36", features = ["cmake-build"], optional = true, package = "rdkafka" }
5051
warp-lib = { version = "^0.3", optional = true, package = "warp" }
51-
async-trait = { version = "^0.1.33", optional = true }
52+
async-trait = { version = "^0.1", optional = true }
5253
bytes = { version = "^1.0", optional = true }
53-
futures = { version = "^0.3", optional = true }
54-
http = { version = "0.2", optional = true }
55-
axum-lib = { version = "^0.6", optional = true, package="axum"}
56-
http-body = { version = "^0.4", optional = true }
57-
poem-lib = { version = "=1.2.34", optional = true, package = "poem" }
58-
nats-lib = { version = "0.21.0", optional = true, package = "nats" }
54+
futures = { version = "^0.3", optional = true, features = ["compat"]}
55+
http = { version = "1.1", optional = true}
56+
http-0-2 = { version = "0.2", optional = true, package = "http"}
57+
axum-lib = { version = "^0.7", optional = true, package="axum"}
58+
http-body-util = {version = "^0.1", optional = true}
59+
poem-lib = { version = "^3.1", optional = true, package = "poem" }
60+
nats-lib = { version = "0.25.0", optional = true, package = "nats" }
5961

6062
[target."cfg(not(target_arch = \"wasm32\"))".dependencies]
61-
hostname = "^0.3"
63+
hostname = "^0.4"
6264

6365
[target.'cfg(all(target_arch = "wasm32", target_os = "unknown"))'.dependencies]
6466
web-sys = { version = "^0.3", features = ["Window", "Location"] }
6567

6668
[target.'cfg(not(target_os = "wasi"))'.dependencies]
67-
hyper = { version = "^0.14", optional = true }
69+
hyper = { version = "^1.4", optional = true, package="hyper" }
70+
hyper-0-14 = { version = "^0.14", optional = true, package = "hyper"}
6871

6972
[target.'cfg(all(target_arch = "wasm32", target_os = "wasi"))'.dependencies]
7073
hyper_wasi = { version = "0.15", features = ["full"], optional = true }
7174

7275
[dev-dependencies]
73-
rstest = "0.6"
76+
rstest = "0.23"
7477
claims = "0.7.1"
7578
version-sync = "0.9.2"
76-
serde_yaml = "0.8"
79+
serde_yaml = "^0.9"
7780
rmp-serde = "1"
7881

7982
# runtime dev-deps
8083

8184
url = { version = "^2.1", features = ["serde"] }
8285
serde_json = { version = "^1.0" }
8386
chrono = { version = "^0.4", features = ["serde"] }
84-
mockito = "0.25.1"
87+
mockito = "0.31.1"
8588
mime = "0.3"
8689

8790

8891
[target.'cfg(not(target_os = "wasi"))'.dev-dependencies]
8992
actix-rt = { version = "^2" }
9093
tokio = { version = "^1.0", features = ["full"] }
91-
tower = { version = "0.4", features = ["util"] }
94+
tower = { version = "0.5", features = ["util"] }
9295

9396
[target.'cfg(all(target_arch = "wasm32", target_os = "wasi"))'.dev-dependencies]
9497
tokio_wasi = { version = "1", features = [

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ enabling your Protocol Binding of choice:
4242

4343
```toml
4444
[dependencies]
45-
cloudevents-sdk = { version = "0.7.0" }
45+
cloudevents-sdk = { version = "0.8.0" }
4646
```
4747

4848
Now you can start creating events:

example-projects/actix-web-example/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ edition = "2018"
77
[dependencies]
88
cloudevents-sdk = { path = "../..", features = ["actix"] }
99
actix-web = "4"
10-
actix-cors = "0.6.0-beta.8"
10+
actix-cors = "^0.7"
1111
serde_json = "^1.0"
1212
url = { version = "^2.1" }
13-
env_logger = "0.7.1"
13+
env_logger = "^0.11"

example-projects/axum-example/Cargo.toml

+5-5
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ edition = "2021"
66

77
[dependencies]
88
cloudevents-sdk = { path = "../..", features = ["axum"] }
9-
axum = "^0.6"
10-
http = "^0.2"
9+
axum = "^0.7"
10+
http = "^1.1"
1111
tokio = { version = "^1", features = ["full"] }
1212
tracing = "^0.1"
13-
tracing-subscriber = "^0.2"
14-
tower-http = { version = "^0.1", features = ["trace"] }
13+
tracing-subscriber = "^0.3"
14+
tower-http = { version = "^0.5", features = ["trace"] }
1515

1616
[dev-dependencies]
1717
tower = { version = "^0.4", features = ["util"] }
1818
serde = { version = "^1.0", features = ["derive"] }
1919
serde_json = "^1.0"
2020
chrono = { version = "^0.4", features = ["serde"] }
21-
hyper = { version = "^0.14" }
21+
hyper = { version = "^1.4" }

example-projects/axum-example/src/main.rs

+2-7
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use axum::{
44
};
55
use cloudevents::Event;
66
use http::StatusCode;
7-
use std::net::SocketAddr;
87
use tower_http::trace::TraceLayer;
98

109
fn echo_app() -> Router {
@@ -27,12 +26,8 @@ async fn main() {
2726
}
2827
tracing_subscriber::fmt::init();
2928
let service = echo_app();
30-
let addr = SocketAddr::from(([127, 0, 0, 1], 8080));
31-
tracing::debug!("listening on {}", addr);
32-
axum::Server::bind(&addr)
33-
.serve(service.into_make_service())
34-
.await
35-
.unwrap();
29+
let listener = tokio::net::TcpListener::bind("0.0.0.0:8080").await.unwrap();
30+
axum::serve(listener, service).await.unwrap();
3631
}
3732

3833
#[cfg(test)]

example-projects/nats-example/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ edition = "2021"
99
[dependencies]
1010
cloudevents-sdk = { path = "../..", features = ["nats"] }
1111
serde_json = "^1.0"
12-
nats = "0.21.0"
12+
nats = "^0.25"

example-projects/poem-example/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ edition = "2021"
77
cloudevents-sdk = { path = "../..", features = ["poem"] }
88
tokio = { version = "1.13", features = ["macros", "rt-multi-thread"] }
99
tracing = "0.1"
10-
poem = { version = "1" }
11-
tracing-subscriber = "0.2"
10+
poem = { version = "^3.0" }
11+
tracing-subscriber = "0.3"
1212
serde_json = "1.0"
1313

1414
[dev-dependencies]

example-projects/reqwest-wasm-example/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ edition = "2018"
1010
crate-type = ["cdylib"]
1111

1212
[dependencies]
13-
reqwest = "^0.11"
13+
reqwest = "^0.12"
1414
uuid = "1"
1515
cloudevents-sdk = { path = "../..", features = ["reqwest"] }
1616
url = { version = "^2.1" }

example-projects/wasi-example/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ edition = "2021"
55

66
[dependencies]
77
anyhow = "1.0"
8-
cloudevents-sdk = { path = "../..", features = ["http-binding", "hyper_wasi", "hyper" ] }
8+
cloudevents-sdk = { path = "../..", features = ["http-0-2-binding", "hyper_wasi", "hyper-0-14" ] }
99
hyper_wasi = { version = "0.15", features = ["full"] }
1010
log = "0.4.21"
1111
tokio_wasi = { version = "1", features = ["io-util", "fs", "net", "time", "rt", "macros"] }
12-
serde_json = " 1.0.116"
12+
serde_json = "^1.0"
1313

1414
[dev-dependencies]
1515
bytes = "1.6.0"

example-projects/wasi-example/src/main.rs

+8-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
use cloudevents::binding::http::builder::adapter::to_response;
2-
use cloudevents::binding::http::to_event;
1+
use cloudevents::binding::http_0_2::builder::adapter::to_response;
2+
use cloudevents::binding::http_0_2::to_event;
33

44
use hyper::service::{make_service_fn, service_fn};
55
use hyper::Server;
@@ -23,7 +23,9 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
2323
}
2424
Ok(())
2525
}
26-
async fn handle_request(req: Request<Body>) -> Result<Response<Body>, anyhow::Error> {
26+
async fn handle_request(
27+
req: Request<Body>,
28+
) -> Result<Response<Body>, anyhow::Error> {
2729
match (req.method(), req.uri().path()) {
2830
(&Method::POST, "/") => {
2931
let headers = req.headers().clone();
@@ -34,7 +36,9 @@ async fn handle_request(req: Request<Body>) -> Result<Response<Body>, anyhow::Er
3436

3537
to_response(_respevt).map_err(|err| err.into())
3638
}
37-
(&Method::GET, "/health/readiness") => Ok(Response::new(Body::from(""))),
39+
(&Method::GET, "/health/readiness") => {
40+
Ok(Response::new(Body::from("")))
41+
}
3842
(&Method::GET, "/health/liveness") => Ok(Response::new(Body::from(""))),
3943
_ => {
4044
let mut not_found = Response::default();

src/binding/actix/server_request.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
use crate::binding::http::{to_event, Headers};
1+
use crate::binding::http_0_2::{to_event, Headers};
22
use crate::Event;
33
use actix_web::dev::Payload;
44
use actix_web::web::BytesMut;
55
use actix_web::{web, HttpRequest};
66
use async_trait::async_trait;
77
use futures::{future::LocalBoxFuture, FutureExt, StreamExt};
88
use http::header::{AsHeaderName, HeaderName, HeaderValue};
9+
use http_0_2 as http;
910

1011
/// Implement Headers for the actix HeaderMap
1112
impl<'a> Headers<'a> for actix_http::header::HeaderMap {

src/binding/actix/server_response.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
use crate::binding::http::{Builder, Serializer};
1+
use crate::binding::http_0_2::{Builder, Serializer};
22
use crate::message::{BinaryDeserializer, Result};
33
use crate::Event;
44
use actix_web::http::StatusCode;
55
use actix_web::{HttpRequest, HttpResponse, HttpResponseBuilder};
6+
use http_0_2 as http;
67

78
impl Builder<HttpResponse> for HttpResponseBuilder {
89
fn header(&mut self, key: &str, value: http::header::HeaderValue) {

src/binding/axum/extract.rs

+27-26
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,46 @@
1-
use axum_lib as axum;
2-
31
use async_trait::async_trait;
4-
use axum::extract::FromRequest;
5-
use axum::http::Request;
6-
use http::request::Parts;
2+
use axum::body::Bytes;
3+
use axum::extract::{FromRequest, Request};
4+
use axum::response::Response;
5+
use axum_lib as axum;
6+
use http;
77
use http::StatusCode;
8-
use http_body::Body;
9-
use hyper::body;
108

119
use crate::binding::http::to_event;
1210
use crate::event::Event;
1311

14-
type BoxError = Box<dyn std::error::Error + Send + Sync>;
15-
1612
#[async_trait]
17-
impl<S, B> FromRequest<S, B> for Event
13+
impl<S> FromRequest<S> for Event
1814
where
19-
B: Body + Send + 'static,
20-
B::Data: Send,
21-
B::Error: Into<BoxError>,
15+
Bytes: FromRequest<S>,
2216
S: Send + Sync,
2317
{
24-
type Rejection = (StatusCode, String);
25-
26-
async fn from_request(req: Request<B>, _state: &S) -> Result<Self, Self::Rejection> {
27-
let (Parts { headers, .. }, req_body) = req.into_parts();
28-
let buf = body::to_bytes(req_body)
29-
.await
30-
.map_err(|e| (StatusCode::BAD_REQUEST, format!("{}", e.into())))?
31-
.to_vec();
32-
33-
to_event(&headers, buf).map_err(|e| (StatusCode::BAD_REQUEST, format!("{}", e)))
18+
type Rejection = Response;
19+
20+
async fn from_request(req: Request, _state: &S) -> Result<Self, Self::Rejection> {
21+
let (parts, body) = req.into_parts();
22+
23+
let body = axum::body::to_bytes(body, usize::MAX).await.map_err(|e| {
24+
Response::builder()
25+
.status(StatusCode::INTERNAL_SERVER_ERROR)
26+
.body(axum::body::Body::from(e.to_string()))
27+
.unwrap()
28+
})?;
29+
30+
to_event(&parts.headers, body.to_vec()).map_err(|e| {
31+
Response::builder()
32+
.status(StatusCode::BAD_REQUEST)
33+
.body(axum::body::Body::from(e.to_string()))
34+
.unwrap()
35+
})
3436
}
3537
}
3638

3739
#[cfg(test)]
3840
mod tests {
39-
use axum_lib as axum;
40-
4141
use super::*;
4242
use axum::body::Body;
43+
use axum::extract::FromRequest;
4344
use axum::http::{self, Request, StatusCode};
4445

4546
use crate::test::fixtures;
@@ -80,7 +81,7 @@ mod tests {
8081
assert!(result.is_err());
8182
let rejection = result.unwrap_err();
8283

83-
let reason = rejection.0;
84+
let reason = rejection.status();
8485
assert_eq!(reason, StatusCode::BAD_REQUEST)
8586
}
8687

src/binding/axum/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ mod tests {
155155
);
156156

157157
let (_, body) = resp.into_parts();
158-
let body = hyper::body::to_bytes(body).await.unwrap();
158+
let body = axum::body::to_bytes(body, usize::MAX).await.unwrap();
159159

160160
assert_eq!(j.to_string().as_bytes(), body);
161161
}

0 commit comments

Comments
 (0)