use rmcp::schemars;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize, schemars::JsonSchema)]
pub struct FindSymbolRequest {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub lang: Option<String>,
}
#[derive(Debug, Deserialize, Serialize, schemars::JsonSchema)]
pub struct GetCallsRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub function_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub symbol_id: Option<u32>,
}
#[derive(Debug, Deserialize, Serialize, schemars::JsonSchema)]
pub struct FindCallersRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub function_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub symbol_id: Option<u32>,
}
#[derive(Debug, Deserialize, Serialize, schemars::JsonSchema)]
pub struct AnalyzeImpactRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub symbol_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub symbol_id: Option<u32>,
#[serde(default = "default_depth")]
pub max_depth: u32,
}
#[derive(Debug, Deserialize, Serialize, schemars::JsonSchema)]
pub struct SearchSymbolsRequest {
pub query: String,
#[serde(default = "default_limit")]
pub limit: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub kind: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub module: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub lang: Option<String>,
}
#[derive(Debug, Deserialize, Serialize, schemars::JsonSchema)]
pub struct SemanticSearchRequest {
pub query: String,
#[serde(default = "default_limit")]
pub limit: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub threshold: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub lang: Option<String>,
}
#[derive(Debug, Deserialize, Serialize, schemars::JsonSchema)]
pub struct SemanticSearchWithContextRequest {
pub query: String,
#[serde(default = "default_context_limit")]
pub limit: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub threshold: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub lang: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct GetIndexInfoRequest {}
impl schemars::JsonSchema for GetIndexInfoRequest {
fn schema_name() -> std::borrow::Cow<'static, str> {
std::borrow::Cow::Borrowed("GetIndexInfoRequest")
}
fn schema_id() -> std::borrow::Cow<'static, str> {
std::borrow::Cow::Borrowed(concat!(module_path!(), "::GetIndexInfoRequest"))
}
fn json_schema(_generator: &mut schemars::SchemaGenerator) -> schemars::Schema {
schemars::Schema::from(
serde_json::json!({
"type": "object",
"properties": {},
"additionalProperties": false
})
.as_object()
.unwrap()
.clone(),
)
}
}
#[derive(Debug, Deserialize, Serialize, schemars::JsonSchema)]
pub struct SearchDocumentsRequest {
pub query: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub collection: Option<String>,
#[serde(default = "default_context_limit")]
pub limit: u32,
}
fn default_depth() -> u32 {
3
}
fn default_limit() -> u32 {
10
}
fn default_context_limit() -> u32 {
5
}