protocol_transport_core
Crate: protocol_transport_core · Path: crates/protocol_transport_core
Description (Cargo.toml): Universal transport foundation for multiple protocols - SpinKube optimized
Universal transport foundation for A2A, MCP, Redpanda PubSub, and REST protocols. Protocol-agnostic, WASM-optimized, zero-copy design with composable transports. Provides the JSON-RPC 2.0 layer, streaming policies, header forwarding, and protocol routing that higher-level crates build on.
Feature flags
Section titled “Feature flags”From crates/protocol_transport_core/Cargo.toml:
| Feature | Purpose |
|---|---|
default | Enables client and server |
client | Client-side transport (transport module) |
server | Server-side routing (server module) |
batch | Batch request support |
Public API (from src/lib.rs)
Section titled “Public API (from src/lib.rs)”Modules: error, forward_headers, headers, jsonrpc, serialization, server (feature server), streaming, transport (feature client)
Core types:
UniversalRequest/UniversalResponse— protocol-agnostic request/response containersProtocolHandlertrait — encode/decode between protocol-specific and universal formatsTransporttrait — async send + health check (noSendbound for WASM compat)AsyncProtocolHandlertrait — Spin SDK async-compatible handlerProtocolRouter— routes requests to registered protocol handlersProtocolHandlerFn— boxed function-based handler type
Re-exports:
ProtocolError,ProtocolResult,TransportError,TransportResultForwardedHeaders,sanitize_header_map,sanitize_headersProtocolHeadersJsonRpcError,JsonRpcId,JsonRpcIncoming,JsonRpcNotification,JsonRpcRequest,JsonRpcResponse,JSONRPC_VERSION,error_codesStreamingPolicy,RPC_REQUEST_TIMEOUTIdleTimeoutStream(native only)
Example sketch
Section titled “Example sketch”use protocol_transport_core::{ProtocolRouter, UniversalRequest, AsyncProtocolHandler};
let mut router = ProtocolRouter::new();router.register("A2A", my_a2a_handler);router.register("MCP", my_mcp_handler);
let request = UniversalRequest { method: "POST".into(), uri: "/jsonrpc".into(), headers: Default::default(), body: payload, protocol: "A2A".into(), correlation_id: uuid::Uuid::new_v4().to_string(),};
let response = router.route_request(request)?;Full API reference: cargo doc -p protocol_transport_core --no-deps