use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "client_objectiveai_mcp.server_response.Payload")]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum Payload {
#[schemars(title = "Initialize")]
Initialize(JsonRpcResult<InitializeReply>),
#[schemars(title = "ToolsList")]
ToolsList(JsonRpcResult<crate::mcp::tool::ListToolsResult>),
#[schemars(title = "ToolsCall")]
ToolsCall(JsonRpcResult<crate::mcp::tool::CallToolResult>),
#[schemars(title = "ResourcesList")]
ResourcesList(JsonRpcResult<crate::mcp::resource::ListResourcesResult>),
#[schemars(title = "ResourcesRead")]
ResourcesRead(JsonRpcResult<crate::mcp::resource::ReadResourceResult>),
#[schemars(title = "SessionTerminate")]
SessionTerminate(JsonRpcResult<()>),
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "client_objectiveai_mcp.server_response.InitializeReply")]
pub struct InitializeReply {
pub mcp_session_id: String,
pub result: crate::mcp::initialize_result::InitializeResult,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "client_objectiveai_mcp.server_response.JsonRpcResult.{R}", bound = "R: JsonSchema")]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum JsonRpcResult<R> {
#[schemars(title = "Ok")]
Ok { result: R },
#[schemars(title = "Err")]
Err {
code: i64,
message: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
data: Option<serde_json::Value>,
},
}