From f6770b4591236036b86f37ef0f26ba0377cc8ac7 Mon Sep 17 00:00:00 2001 From: Pranav Bhatt <42911524+pranav-bhatt@users.noreply.github.com> Date: Mon, 22 Jun 2020 19:57:05 +0530 Subject: [PATCH] Improve api of module cloudevents-sdk-reqwest (#57) * wip improve_api Signed-off-by: Pranav Bhatt * improved cloudevent-sdk-reqwest api Signed-off-by: Pranav Bhatt Signed-off-by: Pranav Bhatt * improve_api finalise#1 Signed-off-by: Pranav Bhatt Signed-off-by: Pranav Bhatt * improve_api(reqwest) finalise#2 Signed-off-by: Pranav Bhatt * improve_api(reqwest) finalise#2 Signed-off-by: Pranav Bhatt Signed-off-by: Pranav Bhatt * improve_api(reqwest) finalise#2 Signed-off-by: Pranav Bhatt Signed-off-by: Pranav Bhatt * improve_api(reqwest) finalise#3 Signed-off-by: Pranav Bhatt * improve_api(reqwest) finalise#4 Signed-off-by: Pranav Bhatt * issue with example Signed-off-by: Pranav Bhatt * tested api calls within rust Signed-off-by: Pranav Bhatt * tested api calls within rust#2 Signed-off-by: Pranav Bhatt * improve_api reqwest finalise Signed-off-by: Pranav Bhatt --- cloudevents-sdk-reqwest/Cargo.toml | 1 + cloudevents-sdk-reqwest/src/client_request.rs | 21 +++++++- .../src/client_response.rs | 50 +++++++++++++++---- cloudevents-sdk-reqwest/src/lib.rs | 2 + .../reqwest-wasm-example/src/lib.rs | 5 +- 5 files changed, 67 insertions(+), 12 deletions(-) diff --git a/cloudevents-sdk-reqwest/Cargo.toml b/cloudevents-sdk-reqwest/Cargo.toml index 5683d21..8f836b4 100644 --- a/cloudevents-sdk-reqwest/Cargo.toml +++ b/cloudevents-sdk-reqwest/Cargo.toml @@ -12,6 +12,7 @@ readme = "README.md" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +async-trait = "^0.1.33" cloudevents-sdk = { version = "0.1.0", path = ".." } lazy_static = "1.4.0" bytes = "^0.5" diff --git a/cloudevents-sdk-reqwest/src/client_request.rs b/cloudevents-sdk-reqwest/src/client_request.rs index fea062b..9c5d630 100644 --- a/cloudevents-sdk-reqwest/src/client_request.rs +++ b/cloudevents-sdk-reqwest/src/client_request.rs @@ -67,6 +67,17 @@ pub fn event_to_request(event: Event, request_builder: RequestBuilder) -> Result BinaryDeserializer::deserialize_binary(event, RequestSerializer::new(request_builder)) } +/// Extention Trait for [`RequestBuilder`] which acts as a wrapper for the function [`event_to_request()`] +pub trait RequestBuilderExt { + fn event(self, event: Event) -> Result; +} + +impl RequestBuilderExt for RequestBuilder { + fn event(self, event: Event) -> Result { + event_to_request(event, self) + } +} + #[cfg(test)] mod tests { use super::*; @@ -98,7 +109,10 @@ mod tests { .unwrap(); let client = reqwest::Client::new(); - event_to_request(input, client.post(&url)) + + client + .post(&url) + .event(input) .unwrap() .send() .await @@ -132,7 +146,10 @@ mod tests { .unwrap(); let client = reqwest::Client::new(); - event_to_request(input, client.post(&url)) + + client + .post(&url) + .event(input) .unwrap() .send() .await diff --git a/cloudevents-sdk-reqwest/src/client_response.rs b/cloudevents-sdk-reqwest/src/client_response.rs index 3c3e97e..d80d383 100644 --- a/cloudevents-sdk-reqwest/src/client_response.rs +++ b/cloudevents-sdk-reqwest/src/client_response.rs @@ -1,4 +1,5 @@ use super::headers; +use async_trait::async_trait; use bytes::Bytes; use cloudevents::event::SpecVersion; use cloudevents::message::{ @@ -107,6 +108,19 @@ pub async fn response_to_event(res: Response) -> Result { MessageDeserializer::into_event(ResponseDeserializer::new(h, b)) } +/// Extention Trait for [`Response`]which acts as a wrapper for the function [`request_to_event()`] +#[async_trait(?Send)] +pub trait ResponseExt { + async fn into_event(self) -> Result; +} + +#[async_trait(?Send)] +impl ResponseExt for Response { + async fn into_event(self) -> Result { + response_to_event(self).await + } +} + #[cfg(test)] mod tests { use super::*; @@ -144,10 +158,16 @@ mod tests { .unwrap(); let client = reqwest::Client::new(); - let res = client.get(&url).send().await.unwrap(); + let res = client + .get(&url) + .send() + .await + .unwrap() + .into_event() + .await + .unwrap(); - let resp = response_to_event(res).await.unwrap(); - assert_eq!(expected, resp); + assert_eq!(expected, res); } #[tokio::test] @@ -181,10 +201,16 @@ mod tests { .unwrap(); let client = reqwest::Client::new(); - let res = client.get(&url).send().await.unwrap(); + let res = client + .get(&url) + .send() + .await + .unwrap() + .into_event() + .await + .unwrap(); - let resp = response_to_event(res).await.unwrap(); - assert_eq!(expected, resp); + assert_eq!(expected, res); } #[tokio::test] @@ -215,9 +241,15 @@ mod tests { .create(); let client = reqwest::Client::new(); - let res = client.get(&url).send().await.unwrap(); + let res = client + .get(&url) + .send() + .await + .unwrap() + .into_event() + .await + .unwrap(); - let resp = response_to_event(res).await.unwrap(); - assert_eq!(expected, resp); + assert_eq!(expected, res); } } diff --git a/cloudevents-sdk-reqwest/src/lib.rs b/cloudevents-sdk-reqwest/src/lib.rs index ced4d20..48ee671 100644 --- a/cloudevents-sdk-reqwest/src/lib.rs +++ b/cloudevents-sdk-reqwest/src/lib.rs @@ -4,6 +4,8 @@ mod client_request; mod client_response; pub use client_request::event_to_request; +pub use client_request::RequestBuilderExt; pub use client_request::RequestSerializer; pub use client_response::response_to_event; pub use client_response::ResponseDeserializer; +pub use client_response::ResponseExt; diff --git a/example-projects/reqwest-wasm-example/src/lib.rs b/example-projects/reqwest-wasm-example/src/lib.rs index a599959..2efe584 100644 --- a/example-projects/reqwest-wasm-example/src/lib.rs +++ b/example-projects/reqwest-wasm-example/src/lib.rs @@ -1,4 +1,5 @@ use cloudevents::{EventBuilder, EventBuilderV10}; +use cloudevents_sdk_reqwest::RequestBuilderExt; use wasm_bindgen::prelude::*; #[wasm_bindgen] @@ -16,7 +17,9 @@ pub async fn run( println!("Going to send event: {:?}", event); - cloudevents_sdk_reqwest::event_to_request(event, reqwest::Client::new().post(&target)) + reqwest::Client::new() + .post(&target) + .event(event) .map_err(|e| e.to_string())? .header("Access-Control-Allow-Origin", "*") .send()