waaa 0.2.1

WebAssembly, Abstracted Away
Documentation
use super::WsMessage;
use futures_util::{SinkExt, StreamExt};
use gloo_net::websocket::futures::WebSocket as GlooWebSocket;
use gloo_net::websocket::Message as GlooMessage;

pub struct WebSocket {
    implem: GlooWebSocket,
}

impl WebSocket {
    pub async fn connect(url: &str) -> anyhow::Result<WebSocket> {
        Ok(WebSocket {
            implem: GlooWebSocket::open(url)?,
        })
    }

    pub async fn send(&mut self, msg: WsMessage) -> anyhow::Result<()> {
        Ok(self.implem.send(match msg {
            WsMessage::Text(text) => GlooMessage::Text(text),
            WsMessage::Binary(data) => GlooMessage::Bytes(data),
        }).await?)
    }

    pub async fn recv(&mut self) -> anyhow::Result<Option<WsMessage>> {
        let Some(msg) = self.implem.next().await else {
            return Ok(None);
        };
        Ok(Some(match msg? {
            GlooMessage::Text(text) => WsMessage::Text(text),
            GlooMessage::Bytes(data) => WsMessage::Binary(data),
        }))
    }
}