From c292e7c92e94c75a11648c63841d2d1fc6553d54 Mon Sep 17 00:00:00 2001 From: slinkydeveloper Date: Tue, 6 Jul 2021 15:25:32 +0200 Subject: [PATCH] Renamed features Moved all bindings under a binding crate Signed-off-by: Francesco Guardiani --- .github/workflows/rust_tests.yml | 2 +- Cargo.toml | 8 +++---- README.md | 10 ++++----- example-projects/actix-web-example/Cargo.toml | 2 +- example-projects/rdkafka-example/Cargo.toml | 2 +- example-projects/rdkafka-example/src/main.rs | 2 +- .../reqwest-wasm-example/Cargo.toml | 2 +- .../reqwest-wasm-example/src/lib.rs | 2 +- example-projects/warp-example/Cargo.toml | 2 +- example-projects/warp-example/src/main.rs | 2 +- src/{ => binding}/actix/headers.rs | 0 src/{ => binding}/actix/mod.rs | 4 ++-- src/{ => binding}/actix/server_request.rs | 0 src/{ => binding}/actix/server_response.rs | 0 src/binding/mod.rs | 10 +++++++++ src/{ => binding}/rdkafka/headers.rs | 0 .../rdkafka/kafka_consumer_record.rs | 2 +- .../rdkafka/kafka_producer_record.rs | 0 src/{ => binding}/rdkafka/mod.rs | 4 ++-- src/{ => binding}/reqwest/client_request.rs | 0 src/{ => binding}/reqwest/client_response.rs | 0 src/{ => binding}/reqwest/headers.rs | 0 src/{ => binding}/reqwest/mod.rs | 2 +- src/{ => binding}/warp/filter.rs | 2 +- src/{ => binding}/warp/headers.rs | 0 src/{ => binding}/warp/mod.rs | 6 +++--- src/{ => binding}/warp/reply.rs | 2 +- src/{ => binding}/warp/server_request.rs | 0 src/{ => binding}/warp/server_response.rs | 0 src/lib.rs | 21 +++++-------------- 30 files changed, 43 insertions(+), 44 deletions(-) rename src/{ => binding}/actix/headers.rs (100%) rename src/{ => binding}/actix/mod.rs (93%) rename src/{ => binding}/actix/server_request.rs (100%) rename src/{ => binding}/actix/server_response.rs (100%) create mode 100644 src/binding/mod.rs rename src/{ => binding}/rdkafka/headers.rs (100%) rename src/{ => binding}/rdkafka/kafka_consumer_record.rs (99%) rename src/{ => binding}/rdkafka/kafka_producer_record.rs (100%) rename src/{ => binding}/rdkafka/mod.rs (93%) rename src/{ => binding}/reqwest/client_request.rs (100%) rename src/{ => binding}/reqwest/client_response.rs (100%) rename src/{ => binding}/reqwest/headers.rs (100%) rename src/{ => binding}/reqwest/mod.rs (94%) rename src/{ => binding}/warp/filter.rs (98%) rename src/{ => binding}/warp/headers.rs (100%) rename src/{ => binding}/warp/mod.rs (91%) rename src/{ => binding}/warp/reply.rs (98%) rename src/{ => binding}/warp/server_request.rs (100%) rename src/{ => binding}/warp/server_response.rs (100%) diff --git a/.github/workflows/rust_tests.yml b/.github/workflows/rust_tests.yml index 8b3b3dd..3657455 100644 --- a/.github/workflows/rust_tests.yml +++ b/.github/workflows/rust_tests.yml @@ -97,7 +97,7 @@ jobs: with: command: build toolchain: ${{ matrix.toolchain }} - args: --target wasm32-unknown-unknown --features cloudevents-reqwest + args: --target wasm32-unknown-unknown --features reqwest-binding # Build examples - uses: actions-rs/cargo@v1 diff --git a/Cargo.toml b/Cargo.toml index a807df2..4466127 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,10 +17,10 @@ categories = ["web-programming", "encoding", "data-structures"] name = "cloudevents" [features] -cloudevents-actix = ["actix-web", "async-trait", "lazy_static", "bytes", "futures"] -cloudevents-reqwest = ["reqwest", "async-trait", "lazy_static", "bytes"] -cloudevents-rdkafka = ["rdkafka", "lazy_static", "bytes"] -cloudevents-warp = ["warp", "lazy_static", "bytes", "http", "hyper"] +actix-binding = ["actix-web", "async-trait", "lazy_static", "bytes", "futures"] +reqwest-binding = ["reqwest", "async-trait", "lazy_static", "bytes"] +rdkafka-binding = ["rdkafka", "lazy_static", "bytes"] +warp-binding = ["warp", "lazy_static", "bytes", "http", "hyper"] [dependencies] serde = { version = "^1.0", features = ["derive"] } diff --git a/README.md b/README.md index ba999e7..b6529cc 100644 --- a/README.md +++ b/README.md @@ -25,10 +25,10 @@ The core modules include definitions for the `Event` and mechanism to support various Protocol Bindings, each of which is enabled by a specific [feature flag]: -* `cloudevents-actix`: Integration with [actix](https://actix.rs/). -* `cloudevents-warp`: Integration with [warp](https://github.com/seanmonstar/warp/). -* `cloudevents-reqwest`: Integration with [reqwest](https://github.com/seanmonstar/reqwest). -* `cloudevents-rdkafka`: Integration with [rdkafka](https://fede1024.github.io/rust-rdkafka). +* `actix-binding`: Integration with [actix](https://actix.rs/). +* `warp-binding`: Integration with [warp](https://github.com/seanmonstar/warp/). +* `reqwest-binding`: Integration with [reqwest](https://github.com/seanmonstar/reqwest). +* `rdkafka-binding`: Integration with [rdkafka](https://fede1024.github.io/rust-rdkafka). This crate is continuously tested to work with GNU libc, WASM and musl toolchains. @@ -40,7 +40,7 @@ enabling your Protocol Binding of choice: ```toml [dependencies] -cloudevents-sdk = { version = "0.3.1", features = ["cloudevents-actix"] } +cloudevents-sdk = { version = "0.3.1", features = ["actix-binding"] } ``` Now you can start creating events: diff --git a/example-projects/actix-web-example/Cargo.toml b/example-projects/actix-web-example/Cargo.toml index 3e85b0c..71b03eb 100644 --- a/example-projects/actix-web-example/Cargo.toml +++ b/example-projects/actix-web-example/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Francesco Guardiani "] edition = "2018" [dependencies] -cloudevents-sdk = { path = "../..", features = ["cloudevents-actix"] } +cloudevents-sdk = { path = "../..", features = ["actix-binding"] } actix-web = "^3" actix-cors = "^0.5" lazy_static = "1.4.0" diff --git a/example-projects/rdkafka-example/Cargo.toml b/example-projects/rdkafka-example/Cargo.toml index 598ef2e..ca1a870 100644 --- a/example-projects/rdkafka-example/Cargo.toml +++ b/example-projects/rdkafka-example/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" [dependencies] async-trait = "^0.1.33" -cloudevents-sdk = { path = "../..", features = ["cloudevents-rdkafka"] } +cloudevents-sdk = { path = "../..", features = ["rdkafka-binding"] } lazy_static = "1.4.0" bytes = "^1.0" url = { version = "^2.1", features = ["serde"] } diff --git a/example-projects/rdkafka-example/src/main.rs b/example-projects/rdkafka-example/src/main.rs index 82781ab..4f7d74d 100644 --- a/example-projects/rdkafka-example/src/main.rs +++ b/example-projects/rdkafka-example/src/main.rs @@ -3,7 +3,7 @@ use futures::StreamExt; use serde_json::json; use cloudevents::{EventBuilder, EventBuilderV10}; -use cloudevents::rdkafka::{FutureRecordExt, MessageExt, MessageRecord}; +use cloudevents::binding::rdkafka::{FutureRecordExt, MessageExt, MessageRecord}; use rdkafka::config::{ClientConfig, RDKafkaLogLevel}; use rdkafka::consumer::stream_consumer::StreamConsumer; diff --git a/example-projects/reqwest-wasm-example/Cargo.toml b/example-projects/reqwest-wasm-example/Cargo.toml index 8d2e894..ae4d24d 100644 --- a/example-projects/reqwest-wasm-example/Cargo.toml +++ b/example-projects/reqwest-wasm-example/Cargo.toml @@ -11,7 +11,7 @@ crate-type = ["cdylib"] [dependencies] reqwest = "^0.11" -cloudevents-sdk = { path = "../..", features = ["cloudevents-reqwest"] } +cloudevents-sdk = { path = "../..", features = ["reqwest-binding"] } url = { version = "^2.1" } web-sys = { version = "0.3.39", features = ["Window", "Location"] } wasm-bindgen-futures = "0.4.12" diff --git a/example-projects/reqwest-wasm-example/src/lib.rs b/example-projects/reqwest-wasm-example/src/lib.rs index 8d9e6fb..6e463ae 100644 --- a/example-projects/reqwest-wasm-example/src/lib.rs +++ b/example-projects/reqwest-wasm-example/src/lib.rs @@ -1,4 +1,4 @@ -use cloudevents::reqwest::RequestBuilderExt; +use cloudevents::binding::reqwest::RequestBuilderExt; use cloudevents::{EventBuilder, EventBuilderV10}; use wasm_bindgen::prelude::*; diff --git a/example-projects/warp-example/Cargo.toml b/example-projects/warp-example/Cargo.toml index 0388e38..eaf7742 100644 --- a/example-projects/warp-example/Cargo.toml +++ b/example-projects/warp-example/Cargo.toml @@ -7,6 +7,6 @@ categories = ["web-programming", "encoding"] license-file = "../LICENSE" [dependencies] -cloudevents-sdk = { path = "../..", features = ["cloudevents-warp"] } +cloudevents-sdk = { path = "../..", features = ["warp-binding"] } warp = "^0.3" tokio = { version = "^1.0", features = ["full"] } diff --git a/example-projects/warp-example/src/main.rs b/example-projects/warp-example/src/main.rs index 7b7ec45..3539620 100644 --- a/example-projects/warp-example/src/main.rs +++ b/example-projects/warp-example/src/main.rs @@ -1,4 +1,4 @@ -use cloudevents::warp::{filter, reply}; +use cloudevents::binding::warp::{filter, reply}; use warp::Filter; #[tokio::main] diff --git a/src/actix/headers.rs b/src/binding/actix/headers.rs similarity index 100% rename from src/actix/headers.rs rename to src/binding/actix/headers.rs diff --git a/src/actix/mod.rs b/src/binding/actix/mod.rs similarity index 93% rename from src/actix/mod.rs rename to src/binding/actix/mod.rs index ea3f322..85039f3 100644 --- a/src/actix/mod.rs +++ b/src/binding/actix/mod.rs @@ -3,7 +3,7 @@ //! To deserialize an HTTP request as CloudEvent: //! //! ``` -//! use cloudevents::actix::HttpRequestExt; +//! use cloudevents::binding::actix::HttpRequestExt; //! use actix_web::{HttpRequest, web, post}; //! //! #[post("/")] @@ -17,7 +17,7 @@ //! To serialize a CloudEvent to an HTTP response: //! //! ``` -//! use cloudevents::actix::HttpResponseBuilderExt; +//! use cloudevents::binding::actix::HttpResponseBuilderExt; //! use actix_web::{HttpRequest, web, get, HttpResponse}; //! use cloudevents::{EventBuilderV10, EventBuilder}; //! use serde_json::json; diff --git a/src/actix/server_request.rs b/src/binding/actix/server_request.rs similarity index 100% rename from src/actix/server_request.rs rename to src/binding/actix/server_request.rs diff --git a/src/actix/server_response.rs b/src/binding/actix/server_response.rs similarity index 100% rename from src/actix/server_response.rs rename to src/binding/actix/server_response.rs diff --git a/src/binding/mod.rs b/src/binding/mod.rs new file mode 100644 index 0000000..07a5d03 --- /dev/null +++ b/src/binding/mod.rs @@ -0,0 +1,10 @@ +//! Provides protocol binding implementations for [`Event`]. + +#[cfg(feature = "actix-binding")] +pub mod actix; +#[cfg(feature = "rdkafka-binding")] +pub mod rdkafka; +#[cfg(feature = "reqwest-binding")] +pub mod reqwest; +#[cfg(feature = "warp-binding")] +pub mod warp; \ No newline at end of file diff --git a/src/rdkafka/headers.rs b/src/binding/rdkafka/headers.rs similarity index 100% rename from src/rdkafka/headers.rs rename to src/binding/rdkafka/headers.rs diff --git a/src/rdkafka/kafka_consumer_record.rs b/src/binding/rdkafka/kafka_consumer_record.rs similarity index 99% rename from src/rdkafka/kafka_consumer_record.rs rename to src/binding/rdkafka/kafka_consumer_record.rs index 6a399e2..02ad926 100644 --- a/src/rdkafka/kafka_consumer_record.rs +++ b/src/binding/rdkafka/kafka_consumer_record.rs @@ -164,7 +164,7 @@ mod private { #[cfg(test)] mod tests { use super::*; - use crate::rdkafka::kafka_producer_record::MessageRecord; + use crate::binding::rdkafka::kafka_producer_record::MessageRecord; use crate::{EventBuilder, EventBuilderV10}; use chrono::Utc; diff --git a/src/rdkafka/kafka_producer_record.rs b/src/binding/rdkafka/kafka_producer_record.rs similarity index 100% rename from src/rdkafka/kafka_producer_record.rs rename to src/binding/rdkafka/kafka_producer_record.rs diff --git a/src/rdkafka/mod.rs b/src/binding/rdkafka/mod.rs similarity index 93% rename from src/rdkafka/mod.rs rename to src/binding/rdkafka/mod.rs index 31c279e..497cf3a 100644 --- a/src/rdkafka/mod.rs +++ b/src/binding/rdkafka/mod.rs @@ -8,7 +8,7 @@ //! use cloudevents::Event; //! use rdkafka::producer::{FutureProducer, FutureRecord}; //! use rdkafka::util::Timeout; -//! use cloudevents::rdkafka::{MessageRecord, FutureRecordExt}; +//! use cloudevents::binding::rdkafka::{MessageRecord, FutureRecordExt}; //! //! # async fn produce(producer: &FutureProducer, event: Event) -> Result<(), Box> { //! let message_record = MessageRecord::from_event(event)?; @@ -28,7 +28,7 @@ //! //! ``` //! use rdkafka::consumer::{StreamConsumer, DefaultConsumerContext, Consumer, CommitMode}; -//! use cloudevents::rdkafka::MessageExt; +//! use cloudevents::binding::rdkafka::MessageExt; //! use futures::StreamExt; //! //! # async fn consume(consumer: StreamConsumer) -> Result<(), Box> { diff --git a/src/reqwest/client_request.rs b/src/binding/reqwest/client_request.rs similarity index 100% rename from src/reqwest/client_request.rs rename to src/binding/reqwest/client_request.rs diff --git a/src/reqwest/client_response.rs b/src/binding/reqwest/client_response.rs similarity index 100% rename from src/reqwest/client_response.rs rename to src/binding/reqwest/client_response.rs diff --git a/src/reqwest/headers.rs b/src/binding/reqwest/headers.rs similarity index 100% rename from src/reqwest/headers.rs rename to src/binding/reqwest/headers.rs diff --git a/src/reqwest/mod.rs b/src/binding/reqwest/mod.rs similarity index 94% rename from src/reqwest/mod.rs rename to src/binding/reqwest/mod.rs index 544218f..08bdb2b 100644 --- a/src/reqwest/mod.rs +++ b/src/binding/reqwest/mod.rs @@ -1,7 +1,7 @@ //! This module integrates the [cloudevents-sdk](https://docs.rs/cloudevents-sdk) with [reqwest](https://docs.rs/reqwest/) to easily send and receive CloudEvents. //! //! ``` -//! use cloudevents::reqwest::{RequestBuilderExt, ResponseExt}; +//! use cloudevents::binding::reqwest::{RequestBuilderExt, ResponseExt}; //! use cloudevents::{EventBuilderV10, EventBuilder}; //! use serde_json::json; //! diff --git a/src/warp/filter.rs b/src/binding/warp/filter.rs similarity index 98% rename from src/warp/filter.rs rename to src/binding/warp/filter.rs index 3a9c51d..7b5245a 100644 --- a/src/warp/filter.rs +++ b/src/binding/warp/filter.rs @@ -16,7 +16,7 @@ impl warp::reject::Reject for EventFilterError {} /// # Extracts [`crate::Event`] from incoming request /// /// ``` -/// use cloudevents::warp::filter::to_event; +/// use cloudevents::binding::warp::filter::to_event; /// use warp::Filter; /// use warp::Reply; /// diff --git a/src/warp/headers.rs b/src/binding/warp/headers.rs similarity index 100% rename from src/warp/headers.rs rename to src/binding/warp/headers.rs diff --git a/src/warp/mod.rs b/src/binding/warp/mod.rs similarity index 91% rename from src/warp/mod.rs rename to src/binding/warp/mod.rs index 64867e5..d409bae 100644 --- a/src/warp/mod.rs +++ b/src/binding/warp/mod.rs @@ -7,8 +7,8 @@ //! //! ``` //! use warp::{Filter, Reply}; -//! use cloudevents::warp::reply::from_event; -//! use cloudevents::warp::filter::to_event; +//! use cloudevents::binding::warp::reply::from_event; +//! use cloudevents::binding::warp::filter::to_event; //! //! let routes = warp::any() //! // extracting event from request @@ -26,7 +26,7 @@ //! use http::StatusCode; //! use serde_json::json; //! use warp::{Filter, Reply}; -//! use cloudevents::warp::reply::from_event; +//! use cloudevents::binding::warp::reply::from_event; //! //! let routes = warp::any().map(|| { //! let event = EventBuilderV10::new() diff --git a/src/warp/reply.rs b/src/binding/warp/reply.rs similarity index 98% rename from src/warp/reply.rs rename to src/binding/warp/reply.rs index 4f91abf..48bd40a 100644 --- a/src/warp/reply.rs +++ b/src/binding/warp/reply.rs @@ -8,7 +8,7 @@ use warp::reply::Response; /// # Serializes [`crate::Event`] as a http response /// /// ``` -/// use cloudevents::warp::reply::from_event; +/// use cloudevents::binding::warp::reply::from_event; /// use cloudevents::Event; /// use warp::Filter; /// use warp::Reply; diff --git a/src/warp/server_request.rs b/src/binding/warp/server_request.rs similarity index 100% rename from src/warp/server_request.rs rename to src/binding/warp/server_request.rs diff --git a/src/warp/server_response.rs b/src/binding/warp/server_response.rs similarity index 100% rename from src/warp/server_response.rs rename to src/binding/warp/server_response.rs diff --git a/src/lib.rs b/src/lib.rs index dd386b0..c83aaa1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -36,7 +36,7 @@ //! Cloudevents uses a set of [feature flags] to conditionally compile //! only the module associated with the Protocol Binding you need: //! -//! - `cloudevents-actix`: Enables the [actix] module. This +//! - `actix-binding`: Enables the [actix] protocol binding module. This //! extends the [`actix_web::HttpRequest`] with a //! [`to_event`](actix::HttpRequestExt::to_event) function, the //! [`actix_web::dev::HttpResponseBuilder`] with an @@ -44,12 +44,9 @@ //! and implementations for [`actix_web::FromRequest`] and //! [`actix_web::Responder`] in order to take advantage of actix-web's //! [Extractors] and [Responders] -//! -//! - `cloudevents-reqwest`: Enables the [reqwest] module. -//! -//! - `cloudevents-warp`: Enables the [warp] module. -//! -//! - `cloudevents-rdkafka`: Enables the [rdkafka] module to +//! - `reqwest-binding`: Enables the [reqwest] protocol binding module. +//! - `warp-binding`: Enables the [warp] protocol binding module. +//! - `rdkafka-binding`: Enables the [rdkafka] protocol binding module to //! seamlessly consume/produce cloudevents within Kafka messages. //! //! [feature flags]: https://doc.rust-lang.org/cargo/reference/manifest.html#the-features-section @@ -58,17 +55,9 @@ #![deny(broken_intra_doc_links)] -#[cfg(feature = "cloudevents-actix")] -pub mod actix; -#[cfg(feature = "cloudevents-rdkafka")] -pub mod rdkafka; -#[cfg(feature = "cloudevents-reqwest")] -pub mod reqwest; -#[cfg(feature = "cloudevents-warp")] -pub mod warp; - pub mod event; pub mod message; +pub mod binding; pub use event::Data; pub use event::Event;