use indexmap::IndexMap;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "client_objectiveai_mcp.server_request.Payload")]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum Payload {
#[schemars(title = "Initialize")]
Initialize {
mcp_kind: super::super::McpKind,
#[serde(flatten)]
params: InitializeRequest,
},
#[schemars(title = "ToolsList")]
ToolsList {
mcp_kind: super::super::McpKind,
#[serde(flatten)]
params: crate::mcp::tool::ListToolsRequest,
},
#[schemars(title = "ToolsCall")]
ToolsCall {
mcp_kind: super::super::McpKind,
#[serde(flatten)]
params: crate::mcp::tool::CallToolRequestParams,
},
#[schemars(title = "ResourcesList")]
ResourcesList {
mcp_kind: super::super::McpKind,
#[serde(flatten)]
params: crate::mcp::resource::ListResourcesRequest,
},
#[schemars(title = "ResourcesRead")]
ResourcesRead {
mcp_kind: super::super::McpKind,
#[serde(flatten)]
params: crate::mcp::resource::ReadResourceRequestParams,
},
#[schemars(title = "SessionTerminate")]
SessionTerminate { mcp_kind: super::super::McpKind },
#[schemars(title = "ReadMessageQueue")]
ReadMessageQueue(ReadMessageQueueRequest),
#[schemars(title = "Retrieve")]
Retrieve(super::super::retrieve::Request),
}
impl Payload {
pub fn mcp_kind(&self) -> Option<super::super::McpKind> {
match self {
Payload::Initialize { mcp_kind, .. }
| Payload::ToolsList { mcp_kind, .. }
| Payload::ToolsCall { mcp_kind, .. }
| Payload::ResourcesList { mcp_kind, .. }
| Payload::ResourcesRead { mcp_kind, .. }
| Payload::SessionTerminate { mcp_kind } => Some(mcp_kind.clone()),
Payload::ReadMessageQueue(_) | Payload::Retrieve(_) => None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "client_objectiveai_mcp.server_request.ReadMessageQueueRequest")]
pub struct ReadMessageQueueRequest {
pub agent_instance_hierarchy: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "client_objectiveai_mcp.server_request.InitializeRequest")]
pub struct InitializeRequest {
#[serde(default, skip_serializing_if = "IndexMap::is_empty")]
#[schemars(extend("omitempty" = true))]
pub args: IndexMap<String, Option<String>>,
}