turbomcp_server/handlers/traits/
resource.rs

1//! Resource handler trait for processing resource requests
2
3use async_trait::async_trait;
4use serde_json::Value;
5use std::collections::HashMap;
6use turbomcp_protocol::RequestContext;
7use turbomcp_protocol::types::{ReadResourceRequest, ReadResourceResult, Resource};
8
9use crate::ServerResult;
10
11/// Resource handler trait for processing resource requests
12#[async_trait]
13pub trait ResourceHandler: Send + Sync {
14    /// Handle a resource read request
15    async fn handle(
16        &self,
17        request: ReadResourceRequest,
18        ctx: RequestContext,
19    ) -> ServerResult<ReadResourceResult>;
20
21    /// Get the resource definition
22    fn resource_definition(&self) -> Resource;
23
24    /// Check if resource exists
25    async fn exists(&self, uri: &str) -> bool;
26
27    /// Get resource metadata
28    async fn metadata(&self, _uri: &str) -> Option<HashMap<String, Value>> {
29        None
30    }
31}