Skip to content

Commit 2929b31

Browse files
committed
Add Support for connection and subscription headers
1 parent 0161345 commit 2929b31

File tree

9 files changed

+378
-107
lines changed

9 files changed

+378
-107
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ futures = "0.3"
1919
tokio = { version = "1", features = ["net"] }
2020
tokio-util = { version = "0.7", features = ["codec"] }
2121
winnow = "0.6"
22+
typed-builder = "0.20.0"
2223

2324
[dev-dependencies]
2425
tokio = { version = "1", features = ["time", "macros", "rt-multi-thread"] }

README.md

Lines changed: 41 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,43 +9,66 @@ Sending a message to a queue.
99

1010
```rust
1111
use futures::prelude::*;
12-
use async_stomp::client;
12+
use async_stomp::client::Connector;
1313
use async_stomp::ToServer;
1414

1515
#[tokio::main]
1616
async fn main() -> Result<(), std::io::Error> {
17-
let mut conn = client::connect("127.0.0.1:61613", None, None).await.unwrap();
18-
19-
conn.send(
20-
ToServer::Send {
17+
let mut conn = Connector::builder()
18+
.server("127.0.0.1:61613")
19+
.virtualhost("/")
20+
.login("guest".to_string())
21+
.passcode("guest".to_string())
22+
.connect()
23+
.await
24+
.unwrap();
25+
26+
conn.send(
27+
ToServer::Send {
2128
destination: "queue.test".into(),
2229
transaction: None,
23-
headers: vec!(),
30+
headers: None,
2431
body: Some(b"Hello there rustaceans!".to_vec()),
25-
}
26-
.into(),
27-
)
28-
.await.expect("sending message to server");
29-
Ok(())
32+
}
33+
.into(),
34+
)
35+
.await
36+
.expect("sending message to server");
37+
Ok(())
3038
}
3139
```
3240

3341
Receiving a message from a queue.
34-
3542
```rust
3643
use futures::prelude::*;
37-
use async_stomp::client;
44+
use async_stomp::client::Connector;
45+
use async_stomp::client::Subscriber;
3846
use async_stomp::FromServer;
3947

4048
#[tokio::main]
4149
async fn main() -> Result<(), std::io::Error> {
42-
let mut conn = client::connect("127.0.0.1:61613", None, None).await.unwrap();
43-
conn.send(client::subscribe("queue.test", "custom-subscriber-id")).await.unwrap();
50+
let mut conn = Connector::builder()
51+
.server("127.0.0.1:61613")
52+
.virtualhost("/")
53+
.login("guest".to_string())
54+
.passcode("guest".to_string())
55+
.connect()
56+
.await
57+
.unwrap();
58+
59+
let subscribe = Subscriber::builder()
60+
.destination("queue.test")
61+
.id("custom-subscriber-id")
62+
.subscribe();
63+
64+
conn.send(subscribe)
65+
.await
66+
.unwrap();
4467

4568
while let Some(item) = conn.next().await {
46-
if let FromServer::Message { message_id,body, .. } = item.unwrap().content {
47-
println!("{:?}", body);
48-
println!("{}", message_id);
69+
if let FromServer::Message { message_id, body, .. } = item.unwrap().content {
70+
println!("{:?}", body);
71+
println!("{}", message_id);
4972
}
5073
}
5174
Ok(())

examples/connect.rs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
use std::time::Duration;
22

3+
use async_stomp::*;
4+
use client::{Connector, Subscriber};
35
use futures::future::ok;
46
use futures::prelude::*;
5-
use async_stomp::*;
67

78
// The example connects to a local server, then sends the following messages -
89
// subscribe to a destination, send a message to the destination, unsubscribe and disconnect
@@ -14,20 +15,24 @@ use async_stomp::*;
1415

1516
#[tokio::main]
1617
async fn main() -> Result<(), anyhow::Error> {
17-
let conn = client::connect(
18-
"127.0.0.1:61613",
19-
"/".to_string(),
20-
"guest".to_string().into(),
21-
"guest".to_string().into(),
22-
)
23-
.await?;
18+
let conn = Connector::builder()
19+
.server("127.0.0.1:61613")
20+
.virtualhost("/")
21+
.login("guest".to_string())
22+
.passcode("guest".to_string())
23+
.connect()
24+
.await?;
2425

2526
tokio::time::sleep(Duration::from_millis(200)).await;
2627

2728
let (mut sink, stream) = conn.split();
2829

2930
let fut1 = async move {
30-
sink.send(client::subscribe("rusty", "myid")).await?;
31+
let subscribe = Subscriber::builder()
32+
.destination("rusty")
33+
.id("myid")
34+
.subscribe();
35+
sink.send(subscribe).await?;
3136
println!("Subscribe sent");
3237

3338
tokio::time::sleep(Duration::from_millis(200)).await;

examples/ping_pong.rs

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
use std::time::Duration;
22

3-
use futures::prelude::*;
43
use async_stomp::*;
4+
use client::{Connector, Subscriber};
5+
use futures::prelude::*;
56

67
// This examples consists of two futures, each of which connects to a local server,
78
// and then sends either PING or PONG messages to the server while listening
@@ -11,14 +12,19 @@ use async_stomp::*;
1112
// `docker run -p 61613:61613 rmohr/activemq:latest`
1213

1314
async fn client(listens: &str, sends: &str, msg: &[u8]) -> Result<(), anyhow::Error> {
14-
let mut conn = client::connect(
15-
"127.0.0.1:61613",
16-
"/".to_string(),
17-
"guest".to_string().into(),
18-
"guest".to_string().into(),
19-
)
20-
.await?;
21-
conn.send(client::subscribe(listens, "myid")).await?;
15+
let mut conn = Connector::builder()
16+
.server("127.0.0.1:61613")
17+
.virtualhost("/")
18+
.login("guest".to_string())
19+
.passcode("guest".to_string())
20+
.connect()
21+
.await?;
22+
23+
let subscribe = Subscriber::builder()
24+
.destination(listens)
25+
.id("myid")
26+
.subscribe();
27+
conn.send(subscribe).await?;
2228

2329
loop {
2430
conn.send(
@@ -33,7 +39,7 @@ async fn client(listens: &str, sends: &str, msg: &[u8]) -> Result<(), anyhow::Er
3339
.await?;
3440
let msg = conn.next().await.transpose()?;
3541
if let Some(FromServer::Message { body, .. }) = msg.as_ref().map(|m| &m.content) {
36-
println!("{}", String::from_utf8_lossy(&body.as_ref().unwrap()));
42+
println!("{}", String::from_utf8_lossy(body.as_ref().unwrap()));
3743
} else {
3844
anyhow::bail!("Unexpected: {:?}", msg)
3945
}

examples/receive_message.rs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,30 @@
1-
use futures::prelude::*;
2-
use async_stomp::client;
1+
use async_stomp::client::Connector;
2+
use async_stomp::client::Subscriber;
33
use async_stomp::FromServer;
4+
use futures::prelude::*;
45

56
// You can start a simple STOMP server with docker:
67
// `docker run -p 61613:61613 -p 8161:8161 rmohr/activemq:latest`
78
// activemq web interface starts at: http://localhost:8161
89

910
#[tokio::main]
1011
async fn main() -> Result<(), std::io::Error> {
11-
let mut conn = client::connect(
12-
"127.0.0.1:61613",
13-
"/".to_string(),
14-
"guest".to_string().into(),
15-
"guest".to_string().into(),
16-
)
17-
.await
18-
.unwrap();
19-
20-
conn.send(client::subscribe("queue.test", "custom-subscriber-id"))
12+
let mut conn = Connector::builder()
13+
.server("127.0.0.1:61613")
14+
.virtualhost("/")
15+
.login("guest".to_string())
16+
.passcode("guest".to_string())
17+
.connect()
2118
.await
2219
.unwrap();
2320

21+
let subscribe = Subscriber::builder()
22+
.destination("queue.test")
23+
.id("custom-subscriber-id")
24+
.subscribe();
25+
26+
conn.send(subscribe).await.unwrap();
27+
2428
while let Some(item) = conn.next().await {
2529
if let FromServer::Message {
2630
message_id, body, ..

examples/send_message.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
use futures::prelude::*;
2-
use async_stomp::client;
1+
use async_stomp::client::Connector;
32
use async_stomp::ToServer;
3+
use futures::prelude::*;
44

55
// You can start a simple STOMP server with docker:
66
// `docker run -p 61613:61613 -p 8161:8161 rmohr/activemq:latest`
77
// activemq web interface starts at: http://localhost:8161
88

99
#[tokio::main]
1010
async fn main() -> Result<(), std::io::Error> {
11-
let mut conn = client::connect(
12-
"127.0.0.1:61613",
13-
"/".to_string(),
14-
"guest".to_string().into(),
15-
"guest".to_string().into(),
16-
)
17-
.await
18-
.unwrap();
11+
let mut conn = Connector::builder()
12+
.server("127.0.0.1:61613")
13+
.virtualhost("/")
14+
.login("guest".to_string())
15+
.passcode("guest".to_string())
16+
.connect()
17+
.await
18+
.unwrap();
1919

2020
conn.send(
2121
ToServer::Send {

0 commit comments

Comments
 (0)