use rmcp::ErrorData;
use rmcp::model::{
ListResourceTemplatesResult, ListResourcesResult, ReadResourceResult, Resource,
ResourceContents,
};
pub const CAPABILITIES_URI: &str = "tmux://capabilities";
const JSON: &str = "application/json";
#[must_use]
pub fn listed() -> ListResourcesResult {
ListResourcesResult::with_all_items(vec![
Resource::new(CAPABILITIES_URI, "capabilities")
.with_description(
"The startup-frozen effective tool surface and each tool's direct authority.",
)
.with_mime_type(JSON),
])
}
#[must_use]
pub fn templates() -> ListResourceTemplatesResult {
ListResourceTemplatesResult::with_all_items(Vec::new())
}
pub fn capabilities(value: &impl serde::Serialize) -> Result<ReadResourceResult, ErrorData> {
let body = serde_json::to_string_pretty(value)
.map_err(|error| ErrorData::internal_error(error.to_string(), None))?;
Ok(ReadResourceResult::new(vec![
ResourceContents::text(body, CAPABILITIES_URI).with_mime_type(JSON),
]))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn capabilities_are_the_only_resource() {
let resources = listed().resources;
assert_eq!(resources.len(), 1);
assert_eq!(resources[0].uri, CAPABILITIES_URI);
assert!(templates().resource_templates.is_empty());
}
}