1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//! [![Crates.io](https://img.shields.io/crates/v/tokio-nats.svg)](https://crates.io/crates/tokio-nats)
//! [![docs.rs](https://docs.rs/tokio-nats/badge.svg)](https://docs.rs/tokio-nats)
//! A client for NATS using `tokio` and async-await.
//!
//! There are still features missing, but it should be ready for use in simple situations.
//!
//! ## Installation
//!
//! ```toml
//! [dependencies]
//! tokio-nats = "0.3.0"
//! ```
//! ## Usage
//! ```rust
//!
//! use tokio_nats::{NatsConfigBuilder, connect};
//! use futures_util::StreamExt;
//!
//! async fn demo() {
//!     let config = NatsConfigBuilder::default()
//!         .server("127.0.0.1:4222")
//!         .build()
//!         .unwrap();
//!     let mut client = connect(config).await.unwrap();
//!
//!     client.publish("MySubject", "hello world".as_bytes()).await.unwrap();
//!
//!     client.subscribe("MyOtherSubject").await.unwrap().for_each(|message| async move {
//!         println!("Received message {:?}", message);
//!     }).await;
//! }
//! ```

#[macro_use]
extern crate serde;
#[macro_use]
extern crate derive_builder;

mod connection;
mod errors;
mod protocol;
mod subscriptions;
mod tls;

use bytes::Bytes;
pub use connection::{connect, NatsClient, NatsConfig, NatsConfigBuilder};
pub use errors::Error;
pub use subscriptions::NatsSubscription;
pub use tls::{TLSConnBuild, TLSConnBuildError, TlsConnParams};

/// A message that has been received by the NATS client.
#[derive(Debug, Clone)]
pub struct NatsMessage {
    pub subject: String,
    pub payload: Bytes,
}