(&self, uri: &str)
| 594 | } |
| 595 | |
| 596 | pub async fn read_resource(&self, uri: &str) -> Result<ReadResourceResult, McpClientError> { |
| 597 | let params = ReadResourceParams { |
| 598 | uri: uri.to_string(), |
| 599 | }; |
| 600 | let params_value = serde_json::to_value(params) |
| 601 | .map_err(|e| McpClientError::ProtocolError(e.to_string()))?; |
| 602 | |
| 603 | let response = self |
| 604 | .send_request("resources/read", Some(params_value)) |
| 605 | .await?; |
| 606 | let result: ReadResourceResult = response |
| 607 | .result |
| 608 | .ok_or_else(|| { |
| 609 | McpClientError::ProtocolError("No result in resources/read response".into()) |
| 610 | }) |
| 611 | .and_then(|r| { |
| 612 | serde_json::from_value(r).map_err(|e| { |
| 613 | McpClientError::ProtocolError(format!( |
| 614 | "Failed to parse resources/read result: {e}" |
| 615 | )) |
| 616 | }) |
| 617 | })?; |
| 618 | |
| 619 | Ok(result) |
| 620 | } |
| 621 | |
| 622 | pub async fn close(&self) -> Result<(), McpClientError> { |
| 623 | let mut transport = self.transport.lock().await; |
no test coverage detected