#byte-stream #stream #async #wasm #io

stream-ws

A layer over WebSocket enables carrying byte stream, for both native and WebAssembly

2 releases

0.1.1 Oct 12, 2023
0.1.0 Oct 12, 2023

#190 in WebSocket

Download history 8/week @ 2024-02-19 22/week @ 2024-02-26 1/week @ 2024-03-11 29/week @ 2024-03-25 30/week @ 2024-04-01

60 downloads per month
Used in 2 crates (via gneiss-mqtt)

MIT/Apache

26KB
445 lines

stream-ws

docs.rs repo crates-io

A layer over WebSocket enables carrying byte stream, for both native and WebAssembly.

Providing methods able to wrap any WebSocket message stream implementation, and impl AsyncRead, AsyncBufRead and AsyncWrite.

Usage

run cargo add stream-ws to bring it into your crate.

Examples in examples/.

Tungstenite

With feature tungstenite.

For WebSocketStream in either crate tokio-tungstenite or async-tungstenite, use

let stream = stream_ws::tungstenite::WsByteStream::new(inner)

Gloo (for WebAssembly)

With feature gloo.

For WebSocket in crate gloo use

let stream = stream_ws::gloo::WsByteStream::new(inner)

Wrapping underlying stream of other WebSocket implementation

Your WebSocket implementation should have a struct S satisfying trait bound

Stream<Item = Result<Msg, E>> + Sink<Msg, Error = E> + Unpin

where Msg and E are message and error type of the implementation.

Create a struct Handler and impl WsMessageHandle, which is easy, and then call Handler::wrap_stream(underlying_stream) to get a WsByteStream.

Crate features

  • tokio: impl tokio's AsyncRead, AsyncBufRead and AsyncWrite variants
  • tungstenite: handlers for message and error type from crate tungstenite
  • gloo: handlers for message and error type from crate gloo

License: MIT OR Apache-2.0

Dependencies

~1–4MB
~80K SLoC