[0.3.0] - 2026-02-19
Breaking Changes
Major Architecture Change: Bring Your Own Transport
The library has been refactored from a full server implementation with built-in
transports to a "Bring Your Own Transport" handler pattern. This simplifies the
library and makes it more flexible and framework-agnostic.
API Changes:
Methodsrenamed toJsonRpcand moved tosrc/jsonrpc.rsserve()function removed - users now callJsonRpc::call()directly- All built-in transports removed from the library:
Stdiotransport removedHttptransport removedInMemorytransport removedTransporttrait removed
Error::TransportErrorvariant removed - transport I/O errors should be
handled by user's transport codeError::Cancelledvariant removed - cancellation handled by transport layerError::transport()constructor method removedDefaultimpl forJsonRpcremoved - useJsonRpc::new()instead- axum integration is now optional (enable with
features = ["axum"])
Migration Guide:
Old server-based API:
use json_rpc::{Methods, Stdio};
let methods = Methods::new().add("echo", echo);
let transport = Stdio::new();
json_rpc::serve(transport, methods).await?;New handler-based API:
use json_rpc::JsonRpc;
let json_rpc = JsonRpc::new().add("echo", echo);
let stdin = tokio::io::stdin();
let mut reader = tokio::io::BufReader::new(stdin);
let mut line = String::new();
while reader.read_line(&mut line).await? > 0 {
let trimmed = line.trim();
if !trimmed.is_empty() {
if let Some(response) = json_rpc.call(trimmed).await {
println!("{}", response);
}
}
line.clear();
}For HTTP integration with axum:
use axum::{Router, routing::post};
use json_rpc::{JsonRpc, axum::handler};
use std::sync::Arc;
let json_rpc = JsonRpc::new().add("echo", echo);
let app = Router::new()
.route("/jsonrpc", post(handler))
.with_state(Arc::new(json_rpc));
let listener = tokio::net::TcpListener::bind(addr).await?;
axum::serve(listener, app).await?;Changed
- Simplify
from_jsonparsing logic with modular helper functions - Add axum handler in
src/axum.rsfor HTTP integration - Make axum and http dependencies optional with new feature flags
- Update Cargo.toml metadata and description
- Update documentation throughout codebase to reflect handler pattern
Fixed
- Fix version number in README.md