| Crates.io | reinhardt-server |
| lib.rs | reinhardt-server |
| version | 0.1.0-alpha.1 |
| created_at | 2026-01-23 04:59:03.950252+00 |
| updated_at | 2026-01-23 04:59:03.950252+00 |
| description | HTTP server implementation for Reinhardt framework |
| homepage | |
| repository | https://github.com/kent8192/reinhardt-rs |
| max_upload_size | |
| id | 2063479 |
| size | 189,564 |
HTTP server implementation for Reinhardt framework
`reinhardt-server` provides a high-performance HTTP server implementation for Reinhardt applications, built on Hyper with support for WebSockets and GraphQL.
This crate provides the following features:
Core HTTP Server: High-performance HTTP/1.1 server
WebSocket Support (feature = "websocket"): WebSocket server implementation
GraphQL Support (feature = "graphql"): GraphQL endpoint integration
Add reinhardt to your Cargo.toml:
[dependencies]
reinhardt = { version = "0.1.0-alpha.1", features = ["server"] }
# For WebSocket support:
# reinhardt = { version = "0.1.0-alpha.1", features = ["server", "server-websocket"] }
# For GraphQL support:
# reinhardt = { version = "0.1.0-alpha.1", features = ["server", "server-graphql"] }
# Or use a preset:
# reinhardt = { version = "0.1.0-alpha.1", features = ["standard"] } # Recommended
# reinhardt = { version = "0.1.0-alpha.1", features = ["full"] } # All features
Then import server features:
use reinhardt::server::{serve, HttpServer};
use reinhardt::server::{WebSocketServer, WebSocketHandler}; // WebSocket
use reinhardt::server::graphql_handler; // GraphQL
Note: Server features are included in the standard and full feature presets.
use reinhardt::server::{serve, HttpServer};
use reinhardt::http::{Request, Response};
use reinhardt::core::exception::Error;
use std::sync::Arc;
async fn my_handler(req: Request) -> Result<Response, Error> {
Response::ok().with_body("Hello, world!")
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let handler = Arc::new(my_handler);
serve("127.0.0.1:8000", handler).await?;
Ok(())
}
use reinhardt::server::HttpServer;
use reinhardt::core::types::{Handler, Middleware};
use reinhardt::http::{Request, Response};
use reinhardt::core::exception::Error;
use std::sync::Arc;
struct MyHandler;
#[async_trait::async_trait]
impl Handler for MyHandler {
async fn handle(&self, _req: Request) -> Result<Response, Error> {
Ok(Response::ok().with_body("Hello from handler!"))
}
}
struct LoggingMiddleware;
#[async_trait::async_trait]
impl Middleware for LoggingMiddleware {
async fn process(&self, request: Request, next: Arc<dyn Handler>) -> Result<Response, Error> {
println!("Request: {} {}", request.method, request.uri);
let response = next.handle(request).await?;
println!("Response: {}", response.status);
Ok(response)
}
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let handler = Arc::new(MyHandler);
let middleware = Arc::new(LoggingMiddleware);
let server = HttpServer::new(handler)
.with_middleware(middleware);
server.listen("127.0.0.1:8000".parse()?).await?;
Ok(())
}
use reinhardt::server::{WebSocketServer, WebSocketHandler};
use std::sync::Arc;
struct EchoHandler;
#[async_trait::async_trait]
impl WebSocketHandler for EchoHandler {
async fn handle_message(&self, message: String) -> Result<String, String> {
Ok(format!("Echo: {}", message))
}
async fn on_connect(&self) {
println!("Client connected");
}
async fn on_disconnect(&self) {
println!("Client disconnected");
}
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let handler = Arc::new(EchoHandler);
let server = WebSocketServer::new(handler);
server.listen("127.0.0.1:9001".parse()?).await?;
Ok(())
}
use reinhardt::server::{WebSocketServer, WebSocketHandler};
use std::sync::Arc;
struct ChatHandler;
#[async_trait::async_trait]
impl WebSocketHandler for ChatHandler {
async fn handle_message(&self, message: String) -> Result<String, String> {
Ok(format!("Received: {}", message))
}
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let handler = Arc::new(ChatHandler);
let server = WebSocketServer::new(handler)
.with_broadcast(100); // Enable broadcast with capacity of 100 messages
// Clone broadcast manager to send messages from other tasks
let broadcast_manager = server.broadcast_manager().unwrap().clone();
// Spawn a task to send periodic broadcasts
tokio::spawn(async move {
loop {
// tokio::time::sleep(tokio::time::Duration::from_secs(5)).await;
broadcast_manager.broadcast("Server announcement!".to_string()).await;
}
});
server.listen("127.0.0.1:9001".parse()?).await?;
Ok(())
}
use reinhardt::server::graphql_handler;
use async_graphql::{Object, Schema, EmptyMutation, EmptySubscription};
struct QueryRoot;
#[Object]
impl QueryRoot {
async fn hello(&self) -> String {
"Hello, GraphQL!".to_string()
}
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let schema = Schema::build(QueryRoot, EmptyMutation, EmptySubscription)
.finish();
let handler = graphql_handler(schema);
serve("127.0.0.1:8000", handler).await?;
Ok(())
}
Handler traitWebSocketHandler traiton_connect and on_disconnectEmptySubscription by defaultserve() function: Helper function providing easy HTTP server startupserve_websocket() function: Helper function providing easy WebSocket server startupgraphql_handler() function: Simplifies Arc wrapping of GraphQL handlersper_minute(): Per-minute rate limitingper_hour(): Per-hour rate limitingLicensed under either of Apache License, Version 2.0 or MIT license at your option.