cloudevents_sdk_actix_web/lib.rs
1//! This crate integrates the [cloudevents-sdk](https://docs.rs/cloudevents-sdk) with [Actix web](https://docs.rs/actix-web/) to easily send and receive CloudEvents.
2//!
3//! To deserialize an HTTP request as CloudEvent:
4//!
5//! ```
6//! use cloudevents_sdk_actix_web::HttpRequestExt;
7//! use actix_web::{HttpRequest, web, post};
8//!
9//! #[post("/")]
10//! async fn post_event(req: HttpRequest, payload: web::Payload) -> Result<String, actix_web::Error> {
11//! let event = req.to_event(payload).await?;
12//! println!("Received Event: {:?}", event);
13//! Ok(format!("{:?}", event))
14//! }
15//! ```
16//!
17//! To serialize a CloudEvent to an HTTP response:
18//!
19//! ```
20//! use cloudevents_sdk_actix_web::HttpResponseBuilderExt;
21//! use actix_web::{HttpRequest, web, get, HttpResponse};
22//! use cloudevents::{EventBuilderV10, EventBuilder};
23//! use serde_json::json;
24//!
25//! #[get("/")]
26//! async fn get_event() -> Result<HttpResponse, actix_web::Error> {
27//! Ok(HttpResponse::Ok()
28//! .event(
29//! EventBuilderV10::new()
30//! .id("0001")
31//! .ty("example.test")
32//! .source("http://localhost/")
33//! .data("application/json", json!({"hello": "world"}))
34//! .build()
35//! .expect("No error while building the event"),
36//! )
37//! .await?
38//! )
39//! }
40//! ```
41//!
42//! Check out the [cloudevents-sdk](https://docs.rs/cloudevents-sdk) docs for more details on how to use [`cloudevents::Event`]
43
44#![doc(html_root_url = "https://docs.rs/cloudevents-sdk-actix-web/0.3.1")]
45#![deny(broken_intra_doc_links)]
46
47#[macro_use]
48mod headers;
49mod server_request;
50mod server_response;
51
52pub use server_request::request_to_event;
53pub use server_request::HttpRequestDeserializer;
54pub use server_request::HttpRequestExt;
55pub use server_response::event_to_response;
56pub use server_response::HttpResponseBuilderExt;
57pub use server_response::HttpResponseSerializer;