cloudevents/binding/nats/mod.rs
1//! This module provides bindings between [cloudevents-sdk](https://docs.rs/cloudevents-sdk) and [nats](https://docs.rs/nats)
2//! ## Examples
3//! Deserialize [nats::Message](https://docs.rs/nats/0.21.0/nats/struct.Message.html) into [Event](https://docs.rs/cloudevents-sdk/latest/cloudevents/event/struct.Event.html)
4//! ```no_run
5//! use nats_lib as nats;
6//! use cloudevents::binding::nats::MessageExt;
7//! use futures::StreamExt;
8//!
9//! #[tokio::main]
10//! async fn main() {
11//! let nc = nats::connect("localhost:4222").await.unwrap();
12//! let mut sub = nc.subscribe("test").await.unwrap();
13//!
14//! // Process messages one at a time
15//! sub.for_each_concurrent(1, |nats_message| async move {
16//! let cloud_event = nats_message.to_event().unwrap();
17//! println!("{}", cloud_event.to_string());
18//! }).await;
19//! }
20//! ```
21//!
22//! Serialize [Event](https://docs.rs/cloudevents-sdk/latest/cloudevents/event/struct.Event.html) into [NatsCloudEvent] and publish to nats subject
23//! ```no_run
24//! use nats_lib as nats;
25//! use cloudevents::binding::nats::NatsCloudEvent;
26//! use cloudevents::{EventBuilder, EventBuilderV10, Event};
27//! use serde_json::json;
28//!
29//! #[tokio::main]
30//! async fn main() {
31//! let nc = nats::connect("localhost:4222").await.unwrap();
32//!
33//! let event = EventBuilderV10::new()
34//! .id("123".to_string())
35//! .ty("example.test")
36//! .source("http://localhost/")
37//! .data("application/json", json!({"hello": "world"}))
38//! .build()
39//! .unwrap();
40//!
41//! let nats_payload = NatsCloudEvent::from_event(event).unwrap();
42//! nc.publish("whatever.subject.you.like", nats_payload.payload.into()).await.unwrap();
43//! }
44//! ```
45mod deserializer;
46mod serializer;
47
48pub use deserializer::MessageExt;
49pub use serializer::NatsCloudEvent;