Improve api (#58)
* wip improve_api Signed-off-by: Pranav Bhatt <adpranavb2000@gmail.com> * improved cloudevent-sdk-reqwest api Signed-off-by: Pranav Bhatt <adpranavb2000@gmail.com> Signed-off-by: Pranav Bhatt <adpranavb2000@gmail.com> * improve_api finalise#1 Signed-off-by: Pranav Bhatt <adpranavb2000@gmail.com> Signed-off-by: Pranav Bhatt <adpranavb2000@gmail.com> * improve_api(reqwest) finalise#2 Signed-off-by: Pranav Bhatt <adpranavb2000@gmail.com> Signed-off-by: Pranav Bhatt <adpranavb2000@gmail.com> * improve_api(reqwest) finalise#2 Signed-off-by: Pranav Bhatt <adpranavb2000@gmail.com> Signed-off-by: Pranav Bhatt <adpranavb2000@gmail.com> * tested api calls within rust Signed-off-by: Pranav Bhatt <adpranavb2000@gmail.com> * tested api calls within rust#2 Signed-off-by: Pranav Bhatt <adpranavb2000@gmail.com> * improve_api actix finalise#1 Signed-off-by: Pranav Bhatt <adpranavb2000@gmail.com> * improve_api actix finalise#2 Signed-off-by: Pranav Bhatt <adpranavb2000@gmail.com> * added documentation for actix api modifications Signed-off-by: Pranav Bhatt <adpranavb2000@gmail.com> * added documentation for actix api modifications#2 Signed-off-by: Pranav Bhatt <adpranavb2000@gmail.com> * improve_api actix-web finalise#3 Signed-off-by: Pranav Bhatt <adpranavb2000@gmail.com> * minor fixes for improve_api(actix) Signed-off-by: Pranav Bhatt <adpranavb2000@gmail.com>
This commit is contained in:
parent
f6770b4591
commit
57f42cf753
|
@ -15,6 +15,7 @@ readme = "README.md"
|
|||
cloudevents-sdk = { version = "0.1.0", path = ".." }
|
||||
actix-web = "2"
|
||||
actix-rt = "1"
|
||||
async-trait = "^0.1.33"
|
||||
lazy_static = "1.4.0"
|
||||
bytes = "^0.5"
|
||||
futures = "^0.3"
|
||||
|
|
|
@ -5,5 +5,7 @@ mod server_response;
|
|||
|
||||
pub use server_request::request_to_event;
|
||||
pub use server_request::HttpRequestDeserializer;
|
||||
pub use server_request::RequestExt;
|
||||
pub use server_response::event_to_response;
|
||||
pub use server_response::HttpResponseBuilderExt;
|
||||
pub use server_response::HttpResponseSerializer;
|
||||
|
|
|
@ -2,6 +2,7 @@ use super::headers;
|
|||
use actix_web::http::HeaderName;
|
||||
use actix_web::web::{Bytes, BytesMut};
|
||||
use actix_web::{web, HttpMessage, HttpRequest};
|
||||
use async_trait::async_trait;
|
||||
use cloudevents::event::SpecVersion;
|
||||
use cloudevents::message::{
|
||||
BinaryDeserializer, BinarySerializer, Encoding, MessageAttributeValue, MessageDeserializer,
|
||||
|
@ -111,6 +112,25 @@ pub async fn request_to_event(
|
|||
.map_err(actix_web::error::ErrorBadRequest)
|
||||
}
|
||||
|
||||
/// Extention Trait for [`HttpRequest`] which acts as a wrapper for the function [`request_to_event()`]
|
||||
#[async_trait(?Send)]
|
||||
pub trait RequestExt {
|
||||
async fn into_event(
|
||||
&self,
|
||||
mut payload: web::Payload,
|
||||
) -> std::result::Result<Event, actix_web::error::Error>;
|
||||
}
|
||||
|
||||
#[async_trait(?Send)]
|
||||
impl RequestExt for HttpRequest {
|
||||
async fn into_event(
|
||||
&self,
|
||||
payload: web::Payload,
|
||||
) -> std::result::Result<Event, actix_web::error::Error> {
|
||||
request_to_event(self, payload).await
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
@ -145,7 +165,7 @@ mod tests {
|
|||
.header("ce-time", time.to_rfc3339())
|
||||
.to_http_parts();
|
||||
|
||||
let resp = request_to_event(&req, web::Payload(payload)).await.unwrap();
|
||||
let resp = req.into_event(web::Payload(payload)).await.unwrap();
|
||||
assert_eq!(expected, resp);
|
||||
}
|
||||
|
||||
|
@ -177,7 +197,7 @@ mod tests {
|
|||
.set_json(&j)
|
||||
.to_http_parts();
|
||||
|
||||
let resp = request_to_event(&req, web::Payload(payload)).await.unwrap();
|
||||
let resp = req.into_event(web::Payload(payload)).await.unwrap();
|
||||
assert_eq!(expected, resp);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ use super::headers;
|
|||
use actix_web::dev::HttpResponseBuilder;
|
||||
use actix_web::http::{HeaderName, HeaderValue};
|
||||
use actix_web::HttpResponse;
|
||||
use async_trait::async_trait;
|
||||
use cloudevents::event::SpecVersion;
|
||||
use cloudevents::message::{
|
||||
BinaryDeserializer, BinarySerializer, MessageAttributeValue, Result, StructuredSerializer,
|
||||
|
@ -75,6 +76,25 @@ pub async fn event_to_response(
|
|||
.map_err(actix_web::error::ErrorBadRequest)
|
||||
}
|
||||
|
||||
/// Extention Trait for [`HttpResponseBuilder`] which acts as a wrapper for the function [`event_to_response()`]
|
||||
#[async_trait(?Send)]
|
||||
pub trait HttpResponseBuilderExt {
|
||||
async fn event(
|
||||
self,
|
||||
event: Event,
|
||||
) -> std::result::Result<HttpResponse, actix_web::error::Error>;
|
||||
}
|
||||
|
||||
#[async_trait(?Send)]
|
||||
impl HttpResponseBuilderExt for HttpResponseBuilder {
|
||||
async fn event(
|
||||
self,
|
||||
event: Event,
|
||||
) -> std::result::Result<HttpResponse, actix_web::error::Error> {
|
||||
event_to_response(event, self).await
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
@ -97,7 +117,8 @@ mod tests {
|
|||
.build()
|
||||
.unwrap();
|
||||
|
||||
let resp = event_to_response(input, HttpResponseBuilder::new(StatusCode::OK))
|
||||
let resp = HttpResponseBuilder::new(StatusCode::OK)
|
||||
.event(input)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
|
@ -140,7 +161,8 @@ mod tests {
|
|||
.build()
|
||||
.unwrap();
|
||||
|
||||
let mut resp = event_to_response(input, HttpResponseBuilder::new(StatusCode::OK))
|
||||
let mut resp = HttpResponseBuilder::new(StatusCode::OK)
|
||||
.event(input)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
|
|
|
@ -109,7 +109,6 @@ mod tests {
|
|||
.unwrap();
|
||||
|
||||
let client = reqwest::Client::new();
|
||||
|
||||
client
|
||||
.post(&url)
|
||||
.event(input)
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
use actix_web::{get, post, web, App, HttpRequest, HttpResponse, HttpServer};
|
||||
use cloudevents::{EventBuilder, EventBuilderV10};
|
||||
use cloudevents_sdk_actix_web::{HttpResponseBuilderExt, RequestExt};
|
||||
use serde_json::json;
|
||||
use std::str::FromStr;
|
||||
use url::Url;
|
||||
|
||||
#[post("/")]
|
||||
async fn post_event(req: HttpRequest, payload: web::Payload) -> Result<String, actix_web::Error> {
|
||||
let event = cloudevents_sdk_actix_web::request_to_event(&req, payload).await?;
|
||||
let event = req.into_event(payload).await?;
|
||||
println!("Received Event: {:?}", event);
|
||||
Ok(format!("{:?}", event))
|
||||
}
|
||||
|
@ -15,18 +16,18 @@ async fn post_event(req: HttpRequest, payload: web::Payload) -> Result<String, a
|
|||
async fn get_event() -> Result<HttpResponse, actix_web::Error> {
|
||||
let payload = json!({"hello": "world"});
|
||||
|
||||
Ok(cloudevents_sdk_actix_web::event_to_response(
|
||||
EventBuilderV10::new()
|
||||
.id("0001")
|
||||
.ty("example.test")
|
||||
.source(Url::from_str("http://localhost/").unwrap())
|
||||
.data("application/json", payload)
|
||||
.extension("someint", "10")
|
||||
.build()
|
||||
.unwrap(),
|
||||
HttpResponse::Ok(),
|
||||
)
|
||||
.await?)
|
||||
Ok(HttpResponse::Ok()
|
||||
.event(
|
||||
EventBuilderV10::new()
|
||||
.id("0001")
|
||||
.ty("example.test")
|
||||
.source(Url::from_str("http://localhost/").unwrap())
|
||||
.data("application/json", payload)
|
||||
.extension("someint", "10")
|
||||
.build()
|
||||
.unwrap(),
|
||||
)
|
||||
.await?)
|
||||
}
|
||||
|
||||
#[actix_rt::main]
|
||||
|
|
Loading…
Reference in New Issue