fix: remove batched json rpc support (#408)
* fix: remove batched json rpc support * fix(test): fix schema
This commit is contained in:
parent
7d46b39b49
commit
f381c2b899
9 changed files with 2 additions and 3497 deletions
|
|
@ -490,40 +490,6 @@ impl ErrorData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
|
|
||||||
#[serde(untagged)]
|
|
||||||
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
|
|
||||||
pub enum JsonRpcBatchRequestItem<Req, Not> {
|
|
||||||
Request(JsonRpcRequest<Req>),
|
|
||||||
Notification(JsonRpcNotification<Not>),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<Req, Not> JsonRpcBatchRequestItem<Req, Not> {
|
|
||||||
pub fn into_non_batch_message<Resp>(self) -> JsonRpcMessage<Req, Resp, Not> {
|
|
||||||
match self {
|
|
||||||
JsonRpcBatchRequestItem::Request(r) => JsonRpcMessage::Request(r),
|
|
||||||
JsonRpcBatchRequestItem::Notification(n) => JsonRpcMessage::Notification(n),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
|
|
||||||
#[serde(untagged)]
|
|
||||||
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
|
|
||||||
pub enum JsonRpcBatchResponseItem<Resp> {
|
|
||||||
Response(JsonRpcResponse<Resp>),
|
|
||||||
Error(JsonRpcError),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<Resp> JsonRpcBatchResponseItem<Resp> {
|
|
||||||
pub fn into_non_batch_message<Req, Not>(self) -> JsonRpcMessage<Req, Resp, Not> {
|
|
||||||
match self {
|
|
||||||
JsonRpcBatchResponseItem::Response(r) => JsonRpcMessage::Response(r),
|
|
||||||
JsonRpcBatchResponseItem::Error(e) => JsonRpcMessage::Error(e),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Represents any JSON-RPC message that can be sent or received.
|
/// Represents any JSON-RPC message that can be sent or received.
|
||||||
///
|
///
|
||||||
/// This enum covers all possible message types in the JSON-RPC protocol:
|
/// This enum covers all possible message types in the JSON-RPC protocol:
|
||||||
|
|
@ -539,10 +505,6 @@ pub enum JsonRpcMessage<Req = Request, Resp = DefaultResponse, Noti = Notificati
|
||||||
Response(JsonRpcResponse<Resp>),
|
Response(JsonRpcResponse<Resp>),
|
||||||
/// A one-way notification (no response expected)
|
/// A one-way notification (no response expected)
|
||||||
Notification(JsonRpcNotification<Noti>),
|
Notification(JsonRpcNotification<Noti>),
|
||||||
/// Multiple requests sent together
|
|
||||||
BatchRequest(Vec<JsonRpcBatchRequestItem<Req, Noti>>),
|
|
||||||
/// Multiple responses sent together
|
|
||||||
BatchResponse(Vec<JsonRpcBatchResponseItem<Resp>>),
|
|
||||||
/// An error response
|
/// An error response
|
||||||
Error(JsonRpcError),
|
Error(JsonRpcError),
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -172,24 +172,6 @@ where
|
||||||
.extensions_mut()
|
.extensions_mut()
|
||||||
.insert(value);
|
.insert(value);
|
||||||
}
|
}
|
||||||
JsonRpcMessage::BatchRequest(json_rpc_batch_request_items) => {
|
|
||||||
for item in json_rpc_batch_request_items {
|
|
||||||
match item {
|
|
||||||
super::JsonRpcBatchRequestItem::Request(json_rpc_request) => {
|
|
||||||
json_rpc_request
|
|
||||||
.request
|
|
||||||
.extensions_mut()
|
|
||||||
.insert(value.clone());
|
|
||||||
}
|
|
||||||
super::JsonRpcBatchRequestItem::Notification(json_rpc_notification) => {
|
|
||||||
json_rpc_notification
|
|
||||||
.notification
|
|
||||||
.extensions_mut()
|
|
||||||
.insert(value.clone());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,8 @@ use crate::{
|
||||||
error::ErrorData as McpError,
|
error::ErrorData as McpError,
|
||||||
model::{
|
model::{
|
||||||
CancelledNotification, CancelledNotificationParam, Extensions, GetExtensions, GetMeta,
|
CancelledNotification, CancelledNotificationParam, Extensions, GetExtensions, GetMeta,
|
||||||
JsonRpcBatchRequestItem, JsonRpcBatchResponseItem, JsonRpcError, JsonRpcMessage,
|
JsonRpcError, JsonRpcMessage, JsonRpcNotification, JsonRpcRequest, JsonRpcResponse, Meta,
|
||||||
JsonRpcNotification, JsonRpcRequest, JsonRpcResponse, Meta, NumberOrString, ProgressToken,
|
NumberOrString, ProgressToken, RequestId, ServerJsonRpcMessage,
|
||||||
RequestId, ServerJsonRpcMessage,
|
|
||||||
},
|
},
|
||||||
transport::{DynamicTransportError, IntoTransport, Transport},
|
transport::{DynamicTransportError, IntoTransport, Transport},
|
||||||
};
|
};
|
||||||
|
|
@ -835,20 +834,6 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Event::PeerMessage(JsonRpcMessage::BatchRequest(batch)) => {
|
|
||||||
batch_messages.extend(
|
|
||||||
batch
|
|
||||||
.into_iter()
|
|
||||||
.map(JsonRpcBatchRequestItem::into_non_batch_message),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
Event::PeerMessage(JsonRpcMessage::BatchResponse(batch)) => {
|
|
||||||
batch_messages.extend(
|
|
||||||
batch
|
|
||||||
.into_iter()
|
|
||||||
.map(JsonRpcBatchResponseItem::into_non_batch_message),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let sink_close_result = transport.close().await;
|
let sink_close_result = transport.close().await;
|
||||||
|
|
|
||||||
|
|
@ -468,10 +468,6 @@ impl LocalSessionWorker {
|
||||||
OutboundChannel::Common
|
OutboundChannel::Common
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ServerJsonRpcMessage::BatchRequest(_) | ServerJsonRpcMessage::BatchResponse(_) => {
|
|
||||||
// the server side should never yield a batch request or response now
|
|
||||||
unreachable!("server side won't yield batch request or response")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
async fn handle_server_message(
|
async fn handle_server_message(
|
||||||
|
|
@ -824,20 +820,6 @@ impl Worker for LocalSessionWorker {
|
||||||
crate::model::JsonRpcMessage::Notification(notification) => {
|
crate::model::JsonRpcMessage::Notification(notification) => {
|
||||||
self.catch_cancellation_notification(notification)
|
self.catch_cancellation_notification(notification)
|
||||||
}
|
}
|
||||||
crate::model::JsonRpcMessage::BatchRequest(items) => {
|
|
||||||
for r in items {
|
|
||||||
match r {
|
|
||||||
crate::model::JsonRpcBatchRequestItem::Request(request) => {
|
|
||||||
if let Some(http_request_id) = http_request_id {
|
|
||||||
self.register_request(request, http_request_id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
crate::model::JsonRpcBatchRequestItem::Notification(
|
|
||||||
notification,
|
|
||||||
) => self.catch_cancellation_notification(notification),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
context.send_to_handler(json_rpc_message).await?;
|
context.send_to_handler(json_rpc_message).await?;
|
||||||
|
|
|
||||||
|
|
@ -319,12 +319,6 @@ where
|
||||||
.map_err(internal_error_response("accept message"))?;
|
.map_err(internal_error_response("accept message"))?;
|
||||||
Ok(accepted_response())
|
Ok(accepted_response())
|
||||||
}
|
}
|
||||||
_ => Ok(Response::builder()
|
|
||||||
.status(http::StatusCode::NOT_IMPLEMENTED)
|
|
||||||
.body(
|
|
||||||
Full::new(Bytes::from("Batch requests are not supported yet")).boxed(),
|
|
||||||
)
|
|
||||||
.expect("valid response")),
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let (session_id, transport) = self
|
let (session_id, transport) = self
|
||||||
|
|
@ -427,10 +421,6 @@ where
|
||||||
}
|
}
|
||||||
ClientJsonRpcMessage::Response(_json_rpc_response) => Ok(accepted_response()),
|
ClientJsonRpcMessage::Response(_json_rpc_response) => Ok(accepted_response()),
|
||||||
ClientJsonRpcMessage::Error(_json_rpc_error) => Ok(accepted_response()),
|
ClientJsonRpcMessage::Error(_json_rpc_error) => Ok(accepted_response()),
|
||||||
_ => Ok(Response::builder()
|
|
||||||
.status(http::StatusCode::NOT_IMPLEMENTED)
|
|
||||||
.body(Full::new(Bytes::from("Batch requests are not supported yet")).boxed())
|
|
||||||
.expect("valid response")),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,20 +27,6 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"description": "Multiple requests sent together",
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/definitions/JsonRpcBatchRequestItem"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "Multiple responses sent together",
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/definitions/JsonRpcBatchResponseItem"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"description": "An error response",
|
"description": "An error response",
|
||||||
"allOf": [
|
"allOf": [
|
||||||
|
|
@ -559,26 +545,6 @@
|
||||||
"format": "const",
|
"format": "const",
|
||||||
"const": "notifications/initialized"
|
"const": "notifications/initialized"
|
||||||
},
|
},
|
||||||
"JsonRpcBatchRequestItem": {
|
|
||||||
"anyOf": [
|
|
||||||
{
|
|
||||||
"$ref": "#/definitions/JsonRpcRequest"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"$ref": "#/definitions/JsonRpcNotification"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"JsonRpcBatchResponseItem": {
|
|
||||||
"anyOf": [
|
|
||||||
{
|
|
||||||
"$ref": "#/definitions/JsonRpcResponse"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"$ref": "#/definitions/JsonRpcError"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"JsonRpcError": {
|
"JsonRpcError": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -27,20 +27,6 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"description": "Multiple requests sent together",
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/definitions/JsonRpcBatchRequestItem"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "Multiple responses sent together",
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/definitions/JsonRpcBatchResponseItem"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"description": "An error response",
|
"description": "An error response",
|
||||||
"allOf": [
|
"allOf": [
|
||||||
|
|
@ -690,26 +676,6 @@
|
||||||
"serverInfo"
|
"serverInfo"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"JsonRpcBatchRequestItem": {
|
|
||||||
"anyOf": [
|
|
||||||
{
|
|
||||||
"$ref": "#/definitions/JsonRpcRequest"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"$ref": "#/definitions/JsonRpcNotification"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"JsonRpcBatchResponseItem": {
|
|
||||||
"anyOf": [
|
|
||||||
{
|
|
||||||
"$ref": "#/definitions/JsonRpcResponse"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"$ref": "#/definitions/JsonRpcError"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"JsonRpcError": {
|
"JsonRpcError": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue