use futures_util::stream::StreamExt;
use serde::{Deserialize, Serialize};
use serde_json::json;
use std::env;
#[derive(Serialize, Deserialize)]
struct Payload {
foo: String,
bar: u8,
}
#[tokio::main]
async fn main() -> Result<(), async_nats::Error> {
let nats_url = env::var("NATS_URL").unwrap_or_else(|_| "nats://localhost:4222".to_string());
let client = async_nats::connect(nats_url).await?;
let mut subscriber = client.subscribe("foo").await?.take(1);
let payload = Payload {
foo: "bar".to_string(),
bar: 27,
};
let bytes = serde_json::to_vec(&json!(payload))?;
client.publish("foo", bytes.into()).await?;
while let Some(message) = subscriber.next().await {
if let Ok(payload) = serde_json::from_slice::<Payload>(&message.payload) {
println!(
"received payload: foo={:?} bar={:?}",
payload.foo, payload.bar
);
}
}
Ok(())
}