From b6f786fcf17ced524590f98e7bbc8310180edafb Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Thu, 19 Feb 2026 06:06:40 +0100 Subject: [PATCH] Simple readme --- README.md | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- logo.svg | 28 +++++++++++++++++++ 2 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 logo.svg diff --git a/README.md b/README.md index 6cd12d5..d64376b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,79 @@ -# session-rs -A lightweight async protocol for WebSocket. +

+ Session +

+

session-rs

+

A lightweight, async WebSocket protocol for Rust.

+ +## Introduction + +This library provides **type-safe WebSocket communication** with a request-response and notification system built on top of a flexible protocol. +It ensures compile-time guarantees for message structure, reduces runtime errors, and simplifies building Rust client/server applications. + +- **Dynamic Methods**: Each message includes a method enum for type safety. +- **Typed Requests & Responses**: Automatic serialization and deserialization. +- **Optional Notifications**: Send asynchronous notifications across sessions. + +## Features + +- Fully typed WebSocket sessions +- Type-safe request/response mechanism +- Optional typed notifications (Todo) +- Lightweight, minimal runtime overhead +- Async-first with Tokio support + +## Installation + +```bash +cargo add session-rs +``` + +--- + +### **Basic Example (client)** + +```rust +#[derive(Debug, Serialize, Deserialize)] +struct Data; + +impl Method for Data { + const NAME: &'static str = "data"; + type Request = String; + type Response = String; + type Error = String; +} + +let session = Session::connect("127.0.0.1:8080", "/").await?; + +session.start_receiver(); + +session + .request::("Hello from client".to_string()) + .await?; +``` + +### **Basic Example (server)** + +```rust +#[derive(Debug, Serialize, Deserialize)] +struct Data; + +impl Method for Data { + const NAME: &'static str = "data"; + type Request = String; + type Response = String; + type Error = String; +} + +let server = SessionServer::bind("127.0.0.1:8080").await?; + +loop { + let session = server.accept().await; + + session + .on::(async |_, req| { + // Response is required + Ok("Hello from server".to_string()) + }) + .await; +} +``` diff --git a/logo.svg b/logo.svg new file mode 100644 index 0000000..7f42bb9 --- /dev/null +++ b/logo.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +