Crate turul_mcp_json_rpc_server

Crate turul_mcp_json_rpc_server 

Source
Expand description

§JSON-RPC 2.0 Server Implementation

A pure, transport-agnostic JSON-RPC 2.0 server implementation with clean domain/protocol separation. This crate provides the core types and dispatch logic for JSON-RPC without any transport-specific code.

§Features

  • JSON-RPC 2.0 Compliance: Full specification support with proper error handling
  • Type-Safe Error Handling: Domain errors with automatic protocol conversion
  • Clean Architecture: Handlers return domain errors, dispatcher owns protocol
  • Transport Agnostic: Works with HTTP, WebSocket, TCP, etc.
  • Async/Await Support: Full async support with session context
  • Zero Double-Wrapping: Clean error handling without intermediate wrappers

§Architecture

// Handlers return domain errors only
#[async_trait]
impl JsonRpcHandler for MyHandler {
    type Error = MyDomainError;  // Not JsonRpcError!

    async fn handle(&self, _method: &str, _params: Option<RequestParams>, _session: Option<turul_mcp_json_rpc_server::SessionContext>) -> Result<Value, MyDomainError> {
        Err(MyDomainError::InvalidInput("bad data".to_string()))
    }
}

// Dispatcher converts domain → protocol automatically (example concept)
// let dispatcher = JsonRpcDispatcher::new(); // Actual usage requires ToJsonRpcError trait

Re-exports§

pub use error::JsonRpcError;
pub use error::JsonRpcErrorCode;
pub use notification::JsonRpcNotification;
pub use request::JsonRpcRequest;
pub use request::RequestParams;
pub use response::JsonRpcMessage;
pub use response::JsonRpcResponse;
pub use response::ResponseResult;
pub use types::JsonRpcVersion;
pub use types::RequestId;
pub use async::JsonRpcDispatcher;
pub use async::JsonRpcHandler;
pub use async::SessionContext;

Modules§

async
dispatch
error
error_codes
Standard JSON-RPC 2.0 error codes
notification
prelude
JSON-RPC Server Prelude
request
response
types

Constants§

JSONRPC_VERSION
JSON-RPC 2.0 version constant