rustzmq2 0.1.0

A native async Rust implementation of ZeroMQ
Documentation
// 05_topics_server — PUB sending multipart "<topic> <price>" stock ticks.
//
// Each message is two frames: a topic prefix ("AAA"/"ABB"/"BBB") and a u32
// price. Subscribers can filter by prefix to receive only the streams they
// care about. Run alongside 05_topics_client (optionally with a topic arg).
use rand::RngExt;
use rustzmq2::prelude::*;
use std::time::Duration;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut rng = rand::rng();
    let stocks: Vec<&str> = vec!["AAA", "ABB", "BBB"];
    println!("Starting server");
    let mut socket = rustzmq2::PubSocket::new();
    socket.bind("tcp://127.0.0.1:5563").await?;

    println!("Start sending loop");
    loop {
        for stock in &stocks {
            let price: u32 = rng.random_range(1..100);
            let mut m: ZmqMessage = ZmqMessage::from(*stock);
            m.push_back(price.to_ne_bytes().to_vec());
            println!("Sending: {:?}", m);
            socket.send(m).await?;
        }
        tokio::time::sleep(Duration::from_secs(1)).await;
    }
}