fn try_from()

in codex-rs/mcp-types/src/lib.rs [1265:1350]


    fn try_from(req: JSONRPCRequest) -> std::result::Result<Self, Self::Error> {
        match req.method.as_str() {
            "initialize" => {
                let params_json = req.params.unwrap_or(serde_json::Value::Null);
                let params: <InitializeRequest as ModelContextProtocolRequest>::Params =
                    serde_json::from_value(params_json)?;
                Ok(ClientRequest::InitializeRequest(params))
            }
            "ping" => {
                let params_json = req.params.unwrap_or(serde_json::Value::Null);
                let params: <PingRequest as ModelContextProtocolRequest>::Params =
                    serde_json::from_value(params_json)?;
                Ok(ClientRequest::PingRequest(params))
            }
            "resources/list" => {
                let params_json = req.params.unwrap_or(serde_json::Value::Null);
                let params: <ListResourcesRequest as ModelContextProtocolRequest>::Params =
                    serde_json::from_value(params_json)?;
                Ok(ClientRequest::ListResourcesRequest(params))
            }
            "resources/templates/list" => {
                let params_json = req.params.unwrap_or(serde_json::Value::Null);
                let params: <ListResourceTemplatesRequest as ModelContextProtocolRequest>::Params =
                    serde_json::from_value(params_json)?;
                Ok(ClientRequest::ListResourceTemplatesRequest(params))
            }
            "resources/read" => {
                let params_json = req.params.unwrap_or(serde_json::Value::Null);
                let params: <ReadResourceRequest as ModelContextProtocolRequest>::Params =
                    serde_json::from_value(params_json)?;
                Ok(ClientRequest::ReadResourceRequest(params))
            }
            "resources/subscribe" => {
                let params_json = req.params.unwrap_or(serde_json::Value::Null);
                let params: <SubscribeRequest as ModelContextProtocolRequest>::Params =
                    serde_json::from_value(params_json)?;
                Ok(ClientRequest::SubscribeRequest(params))
            }
            "resources/unsubscribe" => {
                let params_json = req.params.unwrap_or(serde_json::Value::Null);
                let params: <UnsubscribeRequest as ModelContextProtocolRequest>::Params =
                    serde_json::from_value(params_json)?;
                Ok(ClientRequest::UnsubscribeRequest(params))
            }
            "prompts/list" => {
                let params_json = req.params.unwrap_or(serde_json::Value::Null);
                let params: <ListPromptsRequest as ModelContextProtocolRequest>::Params =
                    serde_json::from_value(params_json)?;
                Ok(ClientRequest::ListPromptsRequest(params))
            }
            "prompts/get" => {
                let params_json = req.params.unwrap_or(serde_json::Value::Null);
                let params: <GetPromptRequest as ModelContextProtocolRequest>::Params =
                    serde_json::from_value(params_json)?;
                Ok(ClientRequest::GetPromptRequest(params))
            }
            "tools/list" => {
                let params_json = req.params.unwrap_or(serde_json::Value::Null);
                let params: <ListToolsRequest as ModelContextProtocolRequest>::Params =
                    serde_json::from_value(params_json)?;
                Ok(ClientRequest::ListToolsRequest(params))
            }
            "tools/call" => {
                let params_json = req.params.unwrap_or(serde_json::Value::Null);
                let params: <CallToolRequest as ModelContextProtocolRequest>::Params =
                    serde_json::from_value(params_json)?;
                Ok(ClientRequest::CallToolRequest(params))
            }
            "logging/setLevel" => {
                let params_json = req.params.unwrap_or(serde_json::Value::Null);
                let params: <SetLevelRequest as ModelContextProtocolRequest>::Params =
                    serde_json::from_value(params_json)?;
                Ok(ClientRequest::SetLevelRequest(params))
            }
            "completion/complete" => {
                let params_json = req.params.unwrap_or(serde_json::Value::Null);
                let params: <CompleteRequest as ModelContextProtocolRequest>::Params =
                    serde_json::from_value(params_json)?;
                Ok(ClientRequest::CompleteRequest(params))
            }
            _ => Err(serde_json::Error::io(std::io::Error::new(
                std::io::ErrorKind::InvalidData,
                format!("Unknown method: {}", req.method),
            ))),
        }
    }