rustwave 0.1.0

A lightweight async event-driven WebSocket framework for Rust
Documentation
use rustwave::{Result, Server};
use serde::{Deserialize, Serialize};
 
#[derive(Serialize, Deserialize, Debug)]
struct ChatMessage {
    room: String,
    text: String,
}
 
#[tokio::main]
async fn main() -> Result<()> {
    let server = Server::bind("127.0.0.1:8080");
 
    server.on("connection", |_data, ctx| async move {
        println!("client connected: {}", ctx.get_socket_id());
    });
 
    server.on("disconnect", |_data, ctx| async move {
        println!("client disconnected: {}", ctx.get_socket_id());
    });
 
    server.on("join-room", |payload, ctx| async move {
        let room = payload.parse::<String>().unwrap_or_default();
        if room.is_empty() {
            return;
        }
        ctx.join_room(&room);
        println!("{} joined room: {}", ctx.get_socket_id(), room);
    });
 
    server.on("chat", |payload, ctx| async move {
        let msg = match payload.parse::<ChatMessage>() {
            Ok(m) => m,
            Err(_) => return,
        };
        let _ = ctx
            .broadcast_to_expect(&msg.room, ctx.get_socket_id(), "chat", msg.text)
            .await;
    });
 
    println!("Listening on ws://127.0.0.1:8080");
    server.run().await?;
    Ok(())
}